0

そこで、プログラムで UIImageView を作成し、それを配列に配置します。touchesMoved では、UIImageView の x 位置をタッチの x 位置に設定しました。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UIImageView *b in _blocks) {
    if ( b.image != wall) {
        movingimage = b;
        movingimage.userInteractionEnabled = YES;

        NSLog(@"touch");
     }
 }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches]anyObject];
CGPoint location = [touch locationInView:touch.view];
CGPoint xlocation = CGPointMake(location.x, movingimage.center.y);
movingimage.center = xlocation;
}

プログラムで作成した UIImageView を使用する代わりに、Interface Builder で作成したものを使用すると、このコードは正常に機能します。しかし、コードを使用して UIImageView を作成し、tochesBegan が UIImageView で開始すると、touchesMoved からのタッチ座標が狂ってしまい、imageView が 2 つの場所の間で非常に速く点滅します。

読んでくれてありがとう。

4

1 に答える 1

2

これは、移動しているビューからタッチ ポイントを取得しているためだと思います。したがって、次のイベントは「不正解」になります。あなたができる最善のことは、スーパービューからタッチ位置をキャプチャすることだと思います.

編集:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches]anyObject];
    CGPoint location = [touch locationInView:[movingimage superview]];
    CGPoint xlocation = CGPointMake(location.x, movingimage.center.y);
    movingimage.center = xlocation;
}
于 2012-10-08T13:12:08.360 に答える