Почему UIImageView полностью сходит с ума, когда touchesBegan начинается с UIImageView?

Поэтому я создаю UIImageView программно и помещаю его в массив. В штрихах Moved я установил ось X в UIImageView в ось 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, созданный программно, я использую тот, который создан в Интерфейсном Разработчике. Но когда я использую код для создания UIImageView, и tochesBegan запускается в UIImageView, координата касания от touchesMoved сходит с ума, и imageView очень быстро мигает между двумя местами.

Спасибо за прочтение.

1 ответ

Решение

Я предполагаю, что это потому, что вы получаете точку соприкосновения с точки зрения, которую вы затем перемещаете. Так что следующее событие будет "неправильным". Я думаю, что лучшее, что вы могли бы сделать, это захватить сенсорное местоположение из суперпредставления.

РЕДАКТИРОВАТЬ:

- (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;
}
Другие вопросы по тегам