1

私はUIView呼ばれるキャラクターを持っています。そのビュー内で、ユーザーはいくつかUIImageViewをサブビューとして追加できます。ピンチ、移動、回転のジェスチャメソッドを作成しました。ジェスチャメソッドがキャラクタービューに追加されました。

移動には、ジェスチャーtranslationInViewプロパティを使用していますが、正常に機能します。私の問題はスケーリングにあります。

個人のスケーリングUIImageViewsは問題ありませんが、すべてをスケーリングするにはどうすればよいですか?

キャラクタービューを拡大縮小しようとしましたが、すべてのサブビューに比例して細かく拡大縮小できますが、キャラクターを構成するためのキャンバスとして使用しているため、キャラクタービューを変更したくありませんUIImageView。を使用して文字を変更すると、CGAffineTransformScale追加したすべての新しいImageViewは同じスケールになります。

私はこれを試しましたが、機能しません:

   if ([gesture state] == UIGestureRecognizerStateBegan || [gesture state] == UIGestureRecognizerStateChanged) {
        CGFloat customScale = gesture.scale;
        for (UIImageView *singleView in [self.devoCharacter subviews]) {
            singleView.frame = CGRectMake(singleView.frame.origin.x / customScale, singleView.frame.origin.y /customScale, singleView.frame.size.width /customScale , singleView.frame.size.height /customScale);
            [gesture setScale:1];
        }
}

このように各ビューのサイズと相対距離を縮小したかったのですが、全体が座標原点から拡大しています。

それから私はこれを試しました:

if ([gesture state] == UIGestureRecognizerStateBegan || [gesture state] == UIGestureRecognizerStateChanged) {
        CGFloat customScale = gesture.scale;
        for (UIImageView *singleView in [self.devoCharacter subviews]) {
            singleView.transform = CGAffineTransformScale(singleView.transform, customScale, customScale);
            [gesture setScale:1];
        }
}

ただし、これは各ビューを個別にスケーリングし、相対距離を維持しません。とにかく、各ビューを比例してスケーリングするだけですか?相対距離も維持しますか?

4

1 に答える 1

1

わかりました、私はそれを行う方法を手に入れました。すべてのビューをスケーリングしてから、それらの中心を比例的にスケーリングします。これで私の問題は解決しました:

        for (Part *singleView in [self.canvas subviews]) {
            singleView.transform = CGAffineTransformScale(singleView.transform, customScale, customScale);
            singleView.center = CGPointMake(singleView.center.x * customScale, singleView.center.y * customScale);
            [gesture setScale:1];
        }
于 2012-05-16T14:53:56.357 に答える