0

ビューコントローラー全体で持続するアプリにメディアプレーヤーがあり、次の図に示すように、ユーザーがそれを閉じられるようにしようとしています:

ここに画像の説明を入力

UIPanGestureRecognizerをプレーヤーに追加しました。パンの状態が変わると、次のように θ を計算できます。

θ = Arctan(opposite/adjacent)

隣接はanchorPoint.x - initialTouchLocation.x、反対側はtranslation.y

UIPanGestureRecognizerUIGestureRecognizerStateBeganでは、プレーヤーのスナップショットを作成し、スナップショットのフレームを実際のプレーヤーのフレームとして設定し、それをスーパー ビューに追加しています。次に、ここで推奨されている内容に基づいて、スナップショットのアンカー ポイントを変更しています。

ではUIGestureRecognizerStateChanged、θ を計算し、それに応じてスナップショットを回転させています。

ここに私が実際に持っているものがありUIPanGestureRecognizerます:

- (void)playerMovedDown:(UIPanGestureRecognizer *)recognizer {
    CGPoint translation = [recognizer translationInView:self.playerView];

    CCPlayer *playerView = (CCPlayer *) recognizer.view;
    switch (recognizer.state) {
        case UIGestureRecognizerStateBegan: {
            _adjacent = self.playerAnchorPoint.x - translation.x;


            self.playerSnapshot = [playerView snapshotViewAfterScreenUpdates:NO];
            [playerView.superview addSubview:self.playerSnapshot];
            self.playerSnapshot.frame = playerView.frame;

            [playerView.superview sendSubviewToBack:playerView];
            [playerView.superview bringSubviewToFront:self.playerSnapshot];


            [self setAnchorPoint:CGPointMake(self.playerOriginalFrame.size.width * relativePlayerAnchorPoint,
                0) forView:playerView];
        }

        case UIGestureRecognizerStateChanged : {
            _opposite = translation.y;
            CGFloat angel = atan2f(_opposite, _adjacent);
            self.playerSnapshot.transform = CGAffineTransformMakeRotation (-angel);
            NSLog(@"%@", NSStringFromCGRect(self.playerSnapshot.frame));
        }
        default: {

        }
    }
}

しかし、プレーヤーをパンしようとすると、実際のビューに代わって回転する必要があるスナップショットが消えます。

Revealでプレーヤーのスナップショットを見つけようとしましたが、ビュー階層に追加されたようですが、画面のどこにも見つかりません。

誰かがこれを修正するのを手伝ってくれるかどうか、またはこの問題について何かを指摘してくれるかどうか疑問に思っています。

編集:回転変換を適用した後 に入れNSLog(@"%@", NSStringFromCGRect(self.playerSnapshot.frame)); て、UIGestureRecognizerStateChanged説明できないことを観察しました

{{7602.2540144175437, 34747.255839671474}, {353.40894445994036, 270.70438804942387}}
{{7677.5559653403761, 34908.541487295603}, {353.41127718399275, 271.19899878758588}}
{{7764.1261318069446, 35092.834523913771}, {353.41188643557598, 271.76320186068915}}
{{7801.1330694789358, 35171.252487591031}, {353.41147875381648, 272.00296155658725}}
{{7844.4014697306702, 35262.665288048178}, {353.41049980147181, 272.28221631572524}}

プレーヤーのスナップショットの原点が画面外に移動しました! しかし、なぜそれが起こっているのかはまだわかりません。

4

1 に答える 1

0

それを理解して、アンカーポイントを間違って設定していました。次のような相対点として設定する必要がありました。

[self setAnchorPoint:CGPointMake(relativePlayerAnchorPoint, 0) forView:playerView];

relativePlayerAnchorPoint = 0.8f

于 2014-08-03T04:51:14.823 に答える