2

基本的には、地球の回転を再現したいと思います。

現実の世界では、指を地球上に置いて右に動かすと、指を動かしている間、地球は右に回転します。

iPhoneではそれほど単純ではありません...

指が画面に降りてきてポイントXをつかみ、指が1ピクセル右に移動すると、地球儀が1フレーム右に回転し、原点が新しいスポットに変わるという単純なものである可能性があります。次に、指が元の場所に戻ると、地球儀が1フレーム左に回転します。すべてあなたの指を拾うことなく...

それで、私はこれについてどうやって行くことができますか?常に/500msごとに実行される「whileTouching」イベントがあると思います...

このようなサンプルコードを知っている人はいますか?

編集:フレーム自体を進めると、理解できないタッチイベントのキャプチャだけを管理できます。

4

2 に答える 2

1

これを行うには、UIPanGestureRecognizerを使用する必要があるようです。基本的に、これは指の押下を追跡し、指が押されている限り、特定のビュー内での移動を追跡します。

コーディングの簡単なアイデアは次のようになります。

UIPanGestureRecognizer *touch = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(someFunction:);
[self.view addGestureRecognizer:touch];
[touch release]; 

これにより、ジェスチャレコグナイザーがビューに追加されます(このコードがビューコントローラーにあると想定しています)。次に、関数「someFunction」内に「グローブスピニング」コードを追加する必要があります。

このようなもの:

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

    // Your globe rotation code goes here
}

[recognizer translationInView:self.view]は、ジェスチャレコグナイザーの翻訳を提供します。これを使用して、地球の画像や変換を設定できますが、実際の回転を処理しています。

お役に立てれば。

乾杯。

于 2011-03-08T21:02:11.387 に答える
1

UIPanGestureRecognizerは、指が動くたびにアクションメソッドを呼び出し続けます。状態を使用して、現在のビューを変更する方法を決定します。

このコードサンプルは、ビューのビューコントローラがジェスチャを処理することを前提としています。

- (void)handlePanGesture:(UIPanGestureRecognizer *)panGesture //Your action method
{
    switch(panGesture.state) {
        case UIGestureRecognizerStateChanged:
            CGPoint translation = [panGesture translationInView:self.view];
            // Rotate the globe by the amount in translation
            // Fall through to began so that the next call is relative to this one
        case UIGestureRecognizerStateBegan:
            [panGesture setTranslation:CGPointZero inView:self.view];
            break;
        case UIGestureRecognizerStateEnded:
            CGPoint velocity = [panGesture velocityInView:self.view];
            // The user lifted their fingers. Optionally use the velocity to continue rotating the globe automatically
            break;
        default:
            // Something else happened. Do any cleanup you need to.
    }
}
于 2011-03-08T22:46:10.400 に答える