我需要一些帮助来进行快速原型 iPad 应用演示。
我有一个带有一些图形元素的大背景图像。然后我在这个视图上创建了一个自定义 UIButton。不幸的是,我需要增加该按钮的点击测试区域。与,因此用户应该认为触摸该图形背景元素也具有与按下直接放置在该细节旁边的按钮相同的功能。
通过覆盖 hittest:withEvent 方法,按钮将被突出显示,但不幸的是,它的目标/选择器不会为 UIControlEventTouchUpInside 调用。
知道如何使它工作吗?谢谢你的帮助
更新: 在 UIControl 类参考中,我找到了在“return self”之前直接包含的“sendActionsForControlEvents”方法:
[self sendActionsForControlEvents:UIControlEventTouchUpInside];
现在触摸将被识别,但“Hittest”日志将被调用两次。我只需要调用它两次。如果有办法做到这一点,我会没事的:)
更新 2:
这是一个示例图表,希望对您有所帮助。
@implementation HotSpotButton
@synthesize data = _data;
- (id)initWithDictionary:(HotSpotDataObject*)hotspotData
{
self.data = hotspotData;
UIImage* img = loadImageWithoutCaching(@"infospot.png");
CGRect frame = CGRectMake(hotspotData.posX, hotspotData.posY, img.size.width, img.size.height);
self = [super initWithFrame:frame];
if (self) {
[self setBackgroundColor:[UIColor darkGrayColor]]; //clearColor
[self setAlpha:1];
[self setBackgroundImage:img forState:UIControlStateNormal];
[self setAdjustsImageWhenHighlighted:YES];
[self setShowsTouchWhenHighlighted:YES];
// Animate the hotspot itself ==================================
CABasicAnimation *scale =[CABasicAnimation animationWithKeyPath:@"transform.scale"];
// some pusling
[self.layer addAnimation:scale forKey:@"animateScale"];
}
return self;
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
int errorMargin = 30;
CGRect largerFrame = CGRectMake(0 - errorMargin, 0 - errorMargin, self.frame.size.width + errorMargin + 1024, self.frame.size.height + errorMargin);
if ((CGRectContainsPoint(largerFrame, point)) == 1){
NSLog(@"HITTEST");
[self sendActionsForControlEvents:UIControlEventTouchUpInside];
return self;
}
else{
NSLog(@"Outside");
return nil;
}
}
@end