1

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

デバイス上の位置の計算に問題があり、ビューが画面の外に移動する可能性があるということが頭に浮かびます。それは可能ですか?

4

1 に答える 1

1

他に何もなければ、startastaticまたは ivar を作成する必要があります。そうしないとUIGestureRecognizerStateChanged、をヒットしたときに、startの間にあった値が保持されませんUIGestureRecognizerStateBegan

于 2013-08-02T19:55:44.457 に答える