2011-08-15 16 views
3

私はこの(かなり)簡単な問題を解決する方法を見つけようとしていますが、私は悲惨に失敗しています。タッチを全体的に検出

私のアプリケーションはいくつかのタブを持つuitabbarで構成されています。それらのうちの1つには、UIImageViewsの束があり、それぞれが画像のサムネイルを表します。同様に、アプリケーションアイコンを1秒間押してiPhoneからアプリケーションを削除するときに、親指を揺らし始めるUILongPressGestureRecognizerレコグナイザを実装しました。ユーザーが親指の角に表示される「X」をタップすると、画像が削除されます。

ウォブリングアニメーションを開始および停止するロジックは、サムを表示するために使用されるUIImageViewのサブクラス内にあります。

私がしようとしているのは、ユーザーが親指以外のどこかを押した場合のウォブル効果をキャンセルすることです。理想的には、可能であれば、UIImageViewサブクラス内にこのキャンセルタッチを検出するコードを配置することをお勧めします。

答えて

6

グローバル私は次のようにUIWindowをサブクラス化することになったすべてのタッチイベントをキャッチする:

// CustomUIWindow.h 
#import <UIKit/UIKit.h> 

#define kTouchPhaseBeganCustomNotification @"TouchPhaseBeganCustomNotification" 

@interface CustomUIWindow : UIWindow 
@property (nonatomic, assign) BOOL enableTouchNotifications; 
@end 

// CustomUIWindow.m 
#import "CustomUIWindow.h" 

@implementation CustomUIWindow 

@synthesize enableTouchNotifications = enableTouchNotifications_; 

- (void)sendEvent:(UIEvent *)event 
{ 
    [super sendEvent:event]; // Apple says you must always call this! 

    if (self.enableTouchNotification) { 
     [[NSNotificationCenter defaultCenter] postNotificationName:kTouchPhaseBeganCustomNotification object:event]; 
    } 
}@end 

私は、すべてのタッチに待機を開始する必要がある時はいつでもその後、世界的に、私は次の操作を行います:私はオブザーバーとPROCを削除stopThumbnailWobbleで

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(stopThumbnailWobble:) 
              name:kTouchPhaseBeganCustomNotification 
              object:nil]; 

((CustomUIWindow *)self.window).enableTouchNotification = YES; 

UITouchイベントでサムを削除するかどうかを決めることができます:

- (void)stopThumbnailWobble:(NSNotification *)event 
{  
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:kTouchPhaseBeganCustomNotification 
                object:nil]; 
    ((CustomUIWindow *)self.window).enableTouchNotification = NO; 

    UIEvent *touchEvent = event.object; 
    // process touchEvent and decide what to do 
    ... 

これは他人に役立つことを望みます。

+0

このエラーメッセージを表示すると、私のアプリがクラッシュしています:[UIWindow setEnableTouchNotifications:]:認識できないセレクターがインスタンス –

+0

に送られました。UIWindowをサブクラス化しましたか? –

+0

いいえ私の問題は別の方法で解決されたので、私はそれを削除しません..とにかくおかげで..少なくとも、私はUIWindowがこのようにサブクラス化されていることを知りました。 –

0

あなたのuiimageviewサブクラスにコード検出を含める必要がある場合、私はappdelegateにタッチが受信されたことを伝えます。アプリのデリゲートは、あなたのすべてのuiimageviewsを伝えるか、それがuiimageviewsであることを示すviewcontrollerに伝えることができます。

未テストコード:

appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate]; 
[appDelegate touchedAt:(int)xPos yPos:(int)yPos]; 
+0

実際、私はuiimageviewコードの中で触れることができるかどうかを確認するために、何か通知の観察を探していました。 uiimageview以外のタッチは、ウォブル効果をキャンセルします。 –

関連する問題