ビューコントローラー全体で持続するアプリにメディアプレーヤーがあり、次の図に示すように、ユーザーがそれを閉じられるようにしようとしています:
UIPanGestureRecognizer
をプレーヤーに追加しました。パンの状態が変わると、次のように θ を計算できます。
θ = Arctan(opposite/adjacent)
隣接はanchorPoint.x - initialTouchLocation.x
、反対側はtranslation.y
私UIPanGestureRecognizer
の UIGestureRecognizerStateBegan
では、プレーヤーのスナップショットを作成し、スナップショットのフレームを実際のプレーヤーのフレームとして設定し、それをスーパー ビューに追加しています。次に、ここで推奨されている内容に基づいて、スナップショットのアンカー ポイントを変更しています。
では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}}
プレーヤーのスナップショットの原点が画面外に移動しました! しかし、なぜそれが起こっているのかはまだわかりません。