2

ユーザーが画像をパンおよびズームできるアプリケーションがあります。あまり問題なく、ユーザーは画像の一部にズームインした状態になり、すべてを「基本状態」にリセットしたいと思うでしょう (つまり、すべての翻訳とそれぞれ 0 と 1 に再スケーリングします)。

私は翻訳を行っています:

- (void)panGestureRecognized:(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];
}

これで問題なく動作し、画像を翻訳できます。

ボタンを押すと、翻訳を 0,0 に戻せるようにしたいと考えています。これを行う 1 つの方法は、次のように、ジェスチャ レコグナイザーを保存し、それをゼロに戻すことです。

mPanRecognizer.view.center = CGPointMake(mPanRecognizer.view.center.x,
                                   mPanRecognizer.view.center.y);
[mPanRecognizer setTranslation:CGPointMake(0,0) inView:self.view];

mPanRecognizer は、レコグナイザーを格納するメンバー変数です。ただし、これを行うと、実際の動作の変更はなく、次のログ情報が生成されます。

Ignoring call to [UIPanGestureRecognizer setTranslation:inView:] since gesture recognizer is not active.

では、ボタンを押してジェスチャをリセットして 0,0 に変換するにはどうすればよいでしょうか?

4

1 に答える 1

2

これは、ジェスチャ レコグナイザを使用せずに実行できます。スケーリングを設定するには、

[self.view setBound:CGRectMake(0,0,width,height)];

とはデバイスwidthheight寸法です。

翻訳を設定するには、

[self.view setCenter:CGPointMake(width/2.0,height/2.0)];

幅と高さを簡単に設定するには、別の UIView にビューを含めます。その UIView を適切に適切な z オーダーで固定してから、上記の行を次のように変更できます。

[imageView setBounds:CGRectMake(0,0,imageView.superview.bounds.size.width,imageView.superview.bounds.size.height)];
[imageView setCenter:CGPointMake(imageView.superview.center.x, imageView.superview.center.y)];

これにより、特定のデバイスに固有のポイントやマジック ナンバーを説明する必要がなくなります。

于 2012-11-29T20:25:32.153 に答える