我在使用 UIPanGestureRecognizer 从屏幕顶部移动 View 时遇到一个奇怪的问题。一切在模拟器中运行完美,但在实际设备上,当我触摸它时, View 消失了。
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint start;
if (recognizer.state == UIGestureRecognizerStateBegan) {
start = [recognizer translationInView:self.view];
originCenter = recognizer.view.center.y;
}
if (recognizer.state == UIGestureRecognizerStateChanged) {
CGPoint translation = [recognizer translationInView:self.view];
if (down) {
if (originCenter + translation.y < self.view.center.y && self.view.center.y + translation.y < self.view.center.y) {
CGPoint move = CGPointMake(self.view.frame.size.width/2, originCenter-(start.y-translation.y));
[recognizer.view setCenter:move];
}
}else{
if (originCenter + translation.y < self.view.center.y && originCenter + translation.y > originCenter) {
CGPoint move = CGPointMake(self.view.frame.size.width/2, originCenter-(start.y-translation.y));
[recognizer.view setCenter:move];
}
}
}
if([recognizer state] == UIGestureRecognizerStateEnded || [recognizer state] == UIGestureRecognizerStateCancelled ){
if(recognizer.view.center.y > -40){
[recognizer.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
down = TRUE;
}else{
[recognizer.view setFrame:CGRectMake(0, 80-self.view.frame.size.height, self.view.frame.size.width, self.view.frame.size.height)];
down = FALSE;
}
}
}
我想到一件事,计算设备上的位置可能存在问题,并且 View 移到了屏幕之外。这可能吗?
最佳答案
如果不出意外,您应该将 start
设为 static
或 ivar。否则,当您点击 UIGestureRecognizerStateChanged
时,start
将不会保留它在 UIGestureRecognizerStateBegan
期间的值。
关于iphone - UIPanGestureRecognizer - View 在拖动时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18025003/