Почему 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;
}