0

UIView があり、ドラッグして垂直方向にのみ移動したい。

私はこのコードを使用しました:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];

AddView.frame = CGRectMake(AddView.frame.origin.x, location.y, AddView.frame.size.width, AddView.frame.size.height);

}

これを行うと、ビューが非常に速く上下します。

私は何を間違っていますか?

4

2 に答える 2

0

ジェスチャ認識機能を使用しないのはなぜですか?

これは、はるかに単純な実装です。

UIPanGestureRecognizer を AddView に追加するだけです。

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];

[AddView addGestureRecognizer:panRecognizer];

次に、移動を処理します。

-(void)move:(UIPanGestureRecognizer*)recognizer {
    CGPoint translatedPoint = [recognizer translationInView:self.view];

    if([(UIPanGestureRecognizer*) recognizer state] == UIGestureRecognizerStateBegan) {
        _firstY = recognizer.view.center.y;
    }

    translatedPoint = CGPointMake(recognizer.view.center.x, _firstY+translatedPoint.y);

    [recognizer.view setCenter:translatedPoint];
}
于 2013-11-05T22:43:31.180 に答える
0

これは、タッチに応答する座標系とビューに問題がある可能性があります。touch.view位置を取得すると、AddViewの座標系になります。AddView のフレームを変更すると、タッチの位置も変更され、表示されている「ジャンプ」が発生します。

タッチの位置が AddView の親ビューの座標で指定されていることを次の行で確認できます。

CGPoint location = [touch locationInView:AddView.superview];

また、Objective-C の規則に関するヒント: インスタンス変数名は通常、小文字で始まり、 .self.addViewではなくドット表記でアクセスする必要がありますAddView

于 2013-11-05T19:11:41.643 に答える