5

学習用アプリ「Solar」の研究をしています。ピンチ ジェスチャを使用してタイルをズームできることに気付きました。ズームの仕方は、uiviewのアンカーポイントを設定したことを明確に示していました。

ここでビデオを見ることができます http://www.youtube.com/watch?v=FfgWkAuLvng

同じことを実現するために、GMGridView コードをダウンロードしました。Solar アプリと同じ出力が得られるようにアンカー ポイントを設定しようとしました。

私が直面している問題は、初めてのピンチズームでは、アンカーポイントでズームできませんが、残りの時間です。初めてアンカーポイントからズームしない理由がわかりませんでした。私を助けてください。

次の方法を次のように変更しました

- (void)pinchGestureUpdated:(UIPinchGestureRecognizer *)pinchGesture

ジェスチャ認識エンジンの開始状態を次のように変更しました

 case UIGestureRecognizerStateBegan:
        {
            [self transformingGestureDidBeginWithGesture:pinchGesture];
            _transformingItem.contentView.layer.anchorPoint = CGPointMake(0,0.5);
            break;
        }
4

3 に答える 3

3

これは、レイヤーのアンカーポイントを変更するとすぐに、レイヤーのビューの中心点も変更されるために発生します。ビューのフレームが0,0,100,100であるとすると、アンカーポイントが0.5,0.5に設定されているため、デフォルトではビューの中心は50,50 になります。アンカーポイントを0,0.5に変更すると、ビューの中心が0,50になり、次に描画されるときにジャンプします。これを回避するには、アンカーポイントを変更した後にビューの中心を更新する必要があります。あなたが説明した範囲内でテストしました:GMGridView

case UIGestureRecognizerStateBegan:
    {
        [self transformingGestureDidBeginWithGesture:pinchGesture];

        _transformingItem.contentView.layer.anchorPoint = CGPointMake(0,0.5);

        CGPoint orgCenter = _transformingItem.contentView.center;
        orgCenter.x -= _transformingItem.contentView.frame.size.width / 2.f;

        [_transformingItem.contentView setCenter:orgCenter];  
    }
    break;

これがあなたの質問に答えることを願っています。

于 2013-06-22T13:48:45.767 に答える
2

hereから取得した次のコードをテストしてください。アンカーポイントの詳細については、こちらもご確認ください

CGRect oldFrame = _transformingItem.contentView.frame;
_transformingItem.contentView.layer.anchorPoint = CGPointMake(0, 0);
_transformingItem.contentView.frame = oldFrame;

これがお役に立てば幸いです。さらにサポートが必要な場合はお知らせください。

于 2013-06-27T06:28:24.183 に答える