2011-01-17 5 views
0

私はUIActionSheetベースのクラスを持っています。このクラスによって作成されたActionSheetsは、デバイス方向の回転が検出された場合に消失するように設計されています。だから、iPhone - 回転検出が敏感すぎる

このクラスが始まるとき、私は

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

とdidRotate上を持っている:私は離れてActionSheetを送信している、閉じています。

わずかな問題はこれだけです。振動があれば、シートを閉じることができます。もう少し強く叩いても、ポップアップは消えるだろう。 actionSheetの中に入力したとしても。

私は加速度計またはcoremotionを有効にしていません。

手がかりはありますか?

おかげ


EDIT

私はこの問題は、当初の向きがUIDeviceOrientationUnknownとして報告されていることで、不安はそれが正しい方向を報告しますことを発見しました。 UIDeviceOrientationUnknownが正しい方向と異なるため、これは回転の変化と見なされます。

今私は運命です。

+2

おそらくinterfaceOrientationを代わりに使用しますか?それはデバイスの方向よりもはるかに "跳ねる"ように思えます。 –

+0

ありがとうございますが、私は通知のものが必要です。通知を使用してそれをどうやって行うのですか?私はそれを見ていない。 – SpaceDog

答えて

2

あなたが興味を持っている回転のタイプを検出する最もよい方法は、UIViewではなくUIViewControllerで呼び出されるため、これをきれいに解くことは難しいです。 UIViewControllerには、willRotateToInterfaceOrientation:duration:があります。これは、自動回転が起こりそうであることを示しています。このメソッドはUIViewControllerにあります。コントローラーは自動回転を許可または拒否する責任があるからです。この情報をあなたの視点に伝えるために、ローテーションが始まろうとしたらいつでもNSNotificationを掲示することができます。次に、UIActionSheetサブクラスはこの通知をリッスンし、適切にシェイプできます。あるいは、サブクラスにメソッドを追加して、回転を直接通知することもできます。 UIViewサブクラスでオートローテーションを聞く頻度と、再利用の必要性がどれほど強いかによって異なります。私が間違っていたフェイスアップとフェイスダウンのイベントに私の他に内部で起こっていたので、私の場合は

+0

また、 'UIDeviceOrientationUnknown'に関しては、それは物事をより困難にします。最初の方向(たとえば、アスペクト比<1はポートレートを意味します)は、報告されずに把握できるヒューリスティックを思いつくことができます。 – warrenm

+0

ありがとう、私はそれを行います! – SpaceDog

2

あなたが持っているinterfaceOrientationを確認してください。 iOSの何かから、PortraitUpとフェイスダウンはサポートされているインターフェイスの向きです。あなたに起こっているのは、肖像画(テーブルに横たわっているとき)が表向きに、逆もまた同様です。ちょうどthatをチェックしてください。 UIInterfaceOrientationではないUIDevice Orientationを見ていることに注意してください。

+0

これは、通知とデバイスの向きを使用して手動で自動回転機能をシミュレートする私の同様の問題を解決しました。ありがとうございました! – quickthyme

0

、私は

if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) 
{ 
//Do Stuff 
} 
else 
{ 
//Do Stuff 
} 

をしていました!

if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) 
{ 
//Do Stuff 
} 
else if(orientation == UIDeviceOrientationPortrait) 
{ 
//Do Stuff 
} 
関連する問題