iPad アプリのラピッド プロトタイプ デモの助けが必要です。
いくつかのグラフィック要素を含む大きな背景画像があります。次に、このビューにカスタム UIButton を作成しました。残念ながら、そのボタンのヒット テスト領域を増やす必要があるため、ユーザーは、そのグラフィカルな背景要素に触れることも、その詳細のすぐ隣に配置されているボタンを押すことと同じ機能を持っていると考える必要があります。
hittest:withEvent メソッドをオーバーライドすると、ボタンが強調表示されますが、残念ながらそのターゲット/セレクターは UIControlEventTouchUpInside に対して呼び出されません。
それを機能させる方法はありますか?助けてくれてありがとう
更新: UIControl クラス リファレンス内で、「return self」の直前にこのように含めた「sendActionsForControlEvents」メソッドを見つけました。
[self sendActionsForControlEvents:UIControlEventTouchUpInside];
これでタッチは認識されますが、「Hittest」ログが 2 回呼び出されます。2回呼び出すだけです。それを行う方法があれば、私は大丈夫です:)
更新 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