gpt4 book ai didi

iphone - UIView 和 UIControl 在 UIScrollView 内拖动时的区别

转载 作者:行者123 更新时间:2023-12-03 19:46:41 32 4
gpt4 key购买 nike

我有一个 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);
}
}

我发现,每次我拖动 UIView 几个像素时,touchesCancelled:withEvent 都会被调用。但如果它是 UIControl 的子类,这些代码将正常工作。为什么?

提前致谢!

最佳答案

UIScrollView 尝试确定用户想要的交互类型。如果您点击 ScrollView 内的某个 View ,该 View 就会开始触摸。如果用户随后拖动, ScrollView 会决定用户想要滚动,因此它将touchesCancelled发送到最先收到事件的 View 。然后它会自行处理拖动。

要启用您自己的 subview 拖动功能,您可以子类化 UIScrollView 并覆盖 touchesShouldBegin:withEvent:inContentView:touchesShouldCancelInContentView:

关于iphone - UIView 和 UIControl 在 UIScrollView 内拖动时的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3279520/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com