複数のUIImageViewサブクラスがあります。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint _location = [touch locationInView:touch.view];
[self processTouch:_location];
}
}
-(void)processTouch:(CGPoint)location {
DLog(@"location: %f .. bounds: %f : %f" ,location.x, [twoThirdOfTheWayCoordinateX floatValue], [oneThirdOfTheWayCoordinateX floatValue]);
if(CGRectContainsPoint(self.frame, location)) {
DLog(@"1");
if(location.x > [twoThirdOfTheWayCoordinateX floatValue]){
[self oneStar];
} else if (location.x < [oneThirdOfTheWayCoordinateX floatValue]) {
[self zeroStars];
} else if( [twoThirdOfTheWayCoordinateX floatValue] >= location.x && location.x >= [oneThirdOfTheWayCoordinateX floatValue]){
[self halfStars];
}
}
}
DLog(@ "1"); 呼び出されることはありません。UIImageViewサブクラスはiPhone画面の中央にあります。左上隅にある場合、このコードは機能します。
NSLog:-[Star processTouch:]場所:44.000000 ..境界:33.333332:16.666666
問題は次の理由によると思います。
if(CGRectContainsPoint(self.frame, location)) {
呼び出されることはありません。
どうしてこんなことに?最初のDLogが呼び出されます。
インスタンスを初期化するために使用するコード:
self.instance = [[Class alloc] initWithFrame:CGRectMake(10, 10, 50 , 50)];
self.instance.userInteractionEnabled = YES;
self.instance.image = [UIImage imageNamed:@"0-0.png"];
[self.view addSubview: self.instance];
[self.instance setNeedsDisplay];