2011-08-15 2 views
3

나는이 (공정하게) 간단한 문제를 해결하는 방법을 찾으려고 노력하지만 비참하게 실패합니다. 그래서 나는 당신의 충고를 정말로 필요로합니다.접촉을 세계적으로 감지하십시오

내 응용 프로그램은 여러 개의 탭이있는 uitabbar로 구성되어 있습니다. 그들 중 하나에는 그림의 축소판을 나타내는 UIImageViews가 있습니다. 마찬가지로 iPhone에서 앱 아이콘을 잠시 눌러 앱을 제거 할 때, 엄지 손가락을 흔들면서 시작하는 UILongPressGestureRecognizer 인식기를 구현했습니다. 사용자가 엄지 손가락 모서리에 표시된 'X'를 탭하면 그림이 제거됩니다.

워 블링 애니메이션을 시작하고 중지하는 로직은 엄지 손가락을 표시하는 데 사용되는 UIImageView의 하위 클래스 내에 있습니다.

사용자가 엄지 밖의 다른 곳을 누르면 워블 효과를 취소하려고합니다. 가능한 한 이상적으로 UIImageView 하위 클래스에서이 취소 터치를 감지하는 코드를 배치하는 것이 좋습니다.

답변

6

전 세계적으로 모든 터치 이벤트를 잡으려고 나는 UIWindow를 서브 클래스 결국 : stopThumbnailWobble에서

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

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

나는 관찰자와 PROC를 제거 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에게 터치가 수신되었음을 알릴 것입니다. 그러면 앱 대리인이 모든 uiimageview를 말하거나 ucontroller에게 uiimageviews를 알리는 viewcontroller에게 알릴 수 있습니다. 그런 다음

// 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 

전 세계적으로 다음 작업을 수행 할 모든 접촉 청취를 시작해야 할 때마다 :

검증되지 않은 코드를 다음과 같이

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

실제로 uiimageview 코드에서 활성화 할 수있는 일종의 알림 관찰을 찾고 있었는지 확인하기 위해 uiimageview 내부 또는 외부에 있는지 확인해야했습니다. uiimageview 외부의 터치는 워블 효과를 취소합니다. –