3

私は非常に単純な Ray Wenderlich iOS の「ドラッグ」の例で作業していました。この例では、2 つUIImageViews(サルとバナナ) を画面上でドラッグできます。UIPanGestureRecognizerViewController 実装ファイルでa を利用します。

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

    CGPoint translation = [recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                         recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

}

これは問題なく動作し、サルとバナナはドラッグした位置にとどまります。UIImageViewただし、クリック(タッチ)した方が一番上に表示されるようにしたかったのです。少しふざけて、次のコード行を思いつきました。

 [self.view bringSubviewToFront:recognizer.view];

これを handlePan メソッドに入れると、クリック (タッチ) された画像はすべて前面に表示されますが、前の画像は画面上の元の位置にリセットされます。タッチされたサブビューを前面に表示するコード行を省略すると、そうはなりません。

他の画像を元の位置にリセットするために、選択したサブビューを前面に移動することについてはどうですか? これはどのように防止されUIPanGestureRecognizerますか?touchesBegantouchesEnded、などの方法ルートに行かずに?

明らかに、私はiosプログラミングに慣れていませんが、おそらく単純な問題に対する答えを見つけることができませんでした. みんなありがとう...助けていただければ幸いです...

4

1 に答える 1

4

ここにソースを再作成しました。問題は自動レイアウトです。無効にする必要があります。ビューを前面に移動すると、他のビューにルールが適用されて位置がチェックされ、元の場所に再配置されるためです。

では、フレームを変更しているときに発生しないのはなぜですか? フレームのみを変更する場合、1 つのビューの中心を変更するたびに自動レイアウト ルールが適用されるわけではなく、ビュー コンテナー階層が変更されたとき、またはビュー コンテナー フレームが変更されたときにのみ適用されます。

あなたが Ray Wenderlich チュートリアルを行っていると言ったように、 autolayout に関するチュートリアルを確認することをお勧めします。Ray Wenderlich のサイトの資料は、出発点として適しています。

--

.xib およびストーリー ボードで、自動レイアウトを無効にするためのちょっとしたヘルプで、ビューを選択し、チェックボックスを無効にします。

自動レイアウトを無効にする

于 2013-05-30T04:21:50.723 に答える