私には見解があり、プログラムで描かれた円があります。また、ジェスチャ認識機能があり、デリゲートがタッチを受け取る必要があるかどうかを確認します(この円をタップした場合はそうする必要があります)。
- (void)awakeFromNib
{
[super awakeFromNib];
circleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleHighlighted:)];
[self addGestureRecognizer:circleTapRecognizer];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
CGPoint hit = [touch locationInView:self];
if (gestureRecognizer == circleTapRecognizer) {
BOOL hitsCircle = hit.x >= CGRectGetMidX(self.bounds) - self.circleRadius &&
hit.x <= CGRectGetMidX(self.bounds) + self.circleRadius &&
hit.y >= CGRectGetMidY(self.bounds) - self.circleRadius &&
hit.y <= CGRectGetMidY(self.bounds) + self.circleRadius;
return hitsCircle;
}
return YES;
}
しかし、この円の外側のスペースをタップした場合は、スーパービューにタッチを与えたいと思います。これどうやってするの?確かに、superviewのロジックを呼び出すという名前のデリゲートメソッド呼び出しを行うことはできますtappedNotOnCircle
が、もっと簡単な方法があるのではないかと思います。