У меня есть UIScrollView, который содержит небольшой подкласс UIView.UIScrollView поддерживает прокрутку, и я хочу, чтобы каждый UIView можно было свободно перетаскивать внутри UIScrollView.
Мой подкласс UIView имеет следующий метод:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if ([touch view] != self) {
return;
}
CGPoint touchPoint = [touch locationInView:self.superview];
originalX = self.center.x;
originalY = self.center.y;
offsetX = originalX - touchPoint.x;
offsetY = originalY - touchPoint.y;
[self.superview bringSubviewToFront:self];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if ([touch view] == self) {
CGPoint location = [touch locationInView:self.superview];
CGFloat x = location.x + offsetX;
CGFloat y = location.y + offsetY;
self.center = CGPointMake(x, y);
return;
}
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if ([touch view] == self) {
self.center = CGPointMake(originalX, originalY);
}
}
Я обнаружил, что touchesCancelled: withEvent будет вызываться при каждомпросто перетащите UIView на несколько пикселей.Но эти коды будут работать правильно, если это подкласс UIControl.Почему?
Заранее спасибо!