2012-02-10 14 views
0

ビデオでしか記述できないような言葉で説明しようとします。RotationGesture後にUIViewをパンするとビューが崩壊する

私は、単一の画像ビューを含むストーリーボードで簡単なiOSアプリケーションを作成しました。私は2つのジェスチャ認識器を追加しました:UIPanGestureRecognizerとUIRotationGestureRecognizerとそれに対応するIBActions。

初めてシミュレータでアプリケーションを起動すると、イメージビューが正しくパンします。画像ビューも正しく回転します。ただし、回転後、以降のパンは失敗します。回転後にパンしようとすると、パンの方向にかかわらず、画像は急速にゼロにスケールされ、消えます。つまり、消えるポイントまで崩壊するか、または消滅します。

ジェスチャ認識プログラムは、次のコードを使用して作成されます。 myImageViewはIBOutlet UIImageViewとして設定されています。

UIPanGestureRecognizer *panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(processPan:)]; 
[myImageView addGestureRecognizer:panRec]; 
UIRotationGestureRecognizer *rotRec = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(processRotation:)]; 
[myImageView addGestureRecognizer:rotRec]; 

私が知っている限り、関連する行動を書いています。基本的には、iOSのドキュメントにある方法のわずかな変更です。これらを以下に示します。

-(IBAction)processPan:(UIPanGestureRecognizer *)sender 
{ 
    if(sender.state == UIGestureRecognizerStateChanged) 
    { 
     CGPoint translation = [sender translationInView:self.view]; 
     CGRect newFrame = myImageView.frame; 
     newFrame.origin.x += translation.x;  
     newFrame.origin.y += translation.y; 
     myImageView.frame = newFrame; 
     [sender setTranslation:CGPointMake(0, 0) inView:self.view]; 
    } 
} 

-(IBAction)processRotation:(UIRotationGestureRecognizer *)sender 
{ 
    if(sender.state == UIGestureRecognizerStateChanged) 
    { 
     myImageView.transform = CGAffineTransformRotate(myImageView.transform, sender.rotation); 
     [sender setRotation:0]; 
    } 
} 

私は何が欠けていますか?私はこれで新しく、うまくいけば私の無知は容認されるでしょう。

Xcodeバージョン4.2.1をMacBookのOS Xバージョン10.7.3で実行しています。私の質問を読む時間をとってくれてありがとう。スタックオーバーフローは信じられないほどのリソースです!

-Dave

+0

どちらのジェスチャーがあるため、彼らが見ているビュー上で行われている回転の破壊される可能性があります。あなたはUIImageViewの上に明確なビューを追加して、認識装置を透明なビューに取り付けることができます。 –

答えて

0

私は解決策を考え出すした場合や、私はその場しのぎで作ってみた場合まあ、私は知りません。基本的に、パンコードは私のために働いていませんでした。ビューが回転または拡大されるたびに、パンニングコードは翻訳されるビューを大きく歪ませたり縮めたりします。私は盲目になるまで変換行列とフレーム座標系を見つめました。

私の最初の投稿に記載されている翻訳コードは、基本的に、AppleのiOS対応イベント処理ガイドのリスト3-2「ジェスチャー認識」セクションのリスト3-2「ピンチ、パン、ダブルタップジェスチャーの処理」それは私のためのトリックを行うだろうと思った。まあ、UIImageViewセンターを使って自分のコードを書いてしまい、フレームをまったく使っていないのです。ここに私のために働いたものです。

CGPoint translation = [sender translationInView:self.superview]; 
CGPoint newCenter = CGPointMake(self.myImageView.center.x + translation.x, self.myImageView.center.y + translation.y); 
[self.myImageView setCenter:newCenter]; 
[sender setTranslation:CGPointMake(0, 0) inView:self.superview]; 

回転された場合の翻訳の参考にsuperviewを使用しました。今はうまくいくようです。

この作業では、フレームの理解がどういうものかが分かります。誰かが私の理解を修正する方法を教えてもらえれば、私はそれを感謝します。

-Dave

関連する問題