UIPanGestureRecognizer - 视图在拖动时消失

时间:2013-08-02 19:43:53

标签: iphone ios objective-c

使用UIPanGestureRecognizer从屏幕顶部移动视图时出现了一个奇怪的问题。一切都在模拟器中完美运行,但在实际设备上,当我触摸它时,视图会消失。

- (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;
        }
    }
}

我想到的一件事是,计算设备上的位置可能会出现问题,并且视图会移到屏幕外。这可能吗?

1 个答案:

答案 0 :(得分:1)

如果不出意外,您应该start static或ivar。否则,当您点击UIGestureRecognizerStateChanged时,start将不会保留UIGestureRecognizerStateBegan期间的值。