我试图弄清楚如何解决这个(相当)简单的问题,但我失败了,所以我真的需要你的建议。
我的应用程序包含一个带有多个标签的uitabbar。在其中一个我有一堆UIImageViews,每个UIImageViews代表一个图片的缩略图。同样,当您通过在应用程序图标上按下一秒钟从iPhone中删除应用程序时,我实现了一个UILongPressGestureRecognizer识别器,它开始摆动拇指。如果用户点击拇指角上出现的“X”,图片就会被移除。
启动和停止摆动动画的逻辑位于UIImageView的子类中,用于显示拇指。
如果用户按下拇指以外的任何其他位置,我正在尝试取消摆动效果。理想情况下,如果可能的话,我更愿意将检测此取消触摸的代码放在UIImageView子类中。
答案 0 :(得分: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
然后,每当我需要开始全局听取所有接触时,我会执行以下操作:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(stopThumbnailWobble:)
name:kTouchPhaseBeganCustomNotification
object:nil];
((CustomUIWindow *)self.window).enableTouchNotification = YES;
在stopThumbnailWobble中我删除观察者并处理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
...
希望这有助于他人。
答案 1 :(得分:0)
如果你必须在你的uiimageview子类中包含代码检测,那么我会告诉appdelegate接收到触摸以及在哪里。然后,应用程序委托可以告诉你所有的uiimageviews或告诉viewcontroller哪个会告诉它的uiimageviews。
未经测试的代码:
appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate touchedAt:(int)xPos yPos:(int)yPos];