如何捕獲觸摸事件,如- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
而沒有子類化UIView或使用UIViewControllers。如何設置UIView觸摸處理程序而不需要子類化
會發生什麼是我有一個簡單的UIView編程創建,我需要檢測基本的輕敲事件。
如何捕獲觸摸事件,如- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
而沒有子類化UIView或使用UIViewControllers。如何設置UIView觸摸處理程序而不需要子類化
會發生什麼是我有一個簡單的UIView編程創建,我需要檢測基本的輕敲事件。
如果您正在爲iOS 4編寫應用程序,請使用UIGestureRecognizer。然後你可以做你想做的。無需繼承即可識別手勢。
否則,子類化是要走的路。
這是一個解決方案。我可以使用UIView'addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer'。 – samwize 2010-08-30 05:58:58
注意事項 - 在3.2中添加了,所以你也可以在iPad上使用它們。 – 2010-08-30 06:26:57
沒有理由不這樣做。如果你繼承和不添加任何東西,它只是一個UIView
由另一個名字調用。你所做的只是攔截你感興趣的功能。如果你不希望阻止響應者從鏈接中獲取這些事件,不要忘記你可以在你的子類'touchesBegan
中執行[super touchesBegan:touches]
。
這是一個很好的建議,但不是如上所述回答問題。 – hotpaw2 2010-08-30 05:31:28
看起來他知道答案 - touchesBegan等 – 2010-08-30 05:35:23
我不明白爲什麼你不想使用繼承UIView的普通方法來捕獲觸摸事件,但是如果你確實需要做一些奇怪的事情或偷偷摸摸的事情,你可以捕獲所有的事件(包括觸摸事件)然後通過捕獲/處理UIWindow級別的sendEvent:方法將它們發送到視圖層次結構中。
這是有用的提示,但不是我想要的。 – samwize 2010-08-30 05:36:27
如果有附加事件處理程序的方法,那麼有人不想要繼承UIView是非常合乎邏輯的。這是一個更強大的設計模式。但如果沒有辦法做到這一點,就沒有辦法做到這一點。 (儘管看起來UIGestureRecognizer可能是最好的選擇。) – 2011-01-14 03:40:13
CustomGestureRecognizer.h
#import <UIKit/UIKit.h>
@interface CustomGestureRecognizer : UIGestureRecognizer
{
}
- (id)initWithTarget:(id)target;
@end
CustomGestureRecognizer.mm
#import "CustomGestureRecognizer.h"
#import <UIKit/UIGestureRecognizerSubclass.h>
@interface CustomGestureRecognizer()
{
}
@property (nonatomic, assign) id target;
@end
@implementation CustomGestureRecognizer
- (id)initWithTarget:(id)target
{
if (self = [super initWithTarget:target action:Nil]) {
self.target = target;
}
return self;
}
- (void)reset
{
[super reset];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
[self.target touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
[self.target touchesMoved:touches withEvent:event];
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent: event];
[self.target touchesEnded:touches withEvent:event];
}
@end
用法:
CustomGestureRecognizer *customGestureRecognizer = [[CustomGestureRecognizer alloc] initWithTarget:self];
[glView addGestureRecognizer:customGestureRecognizer];
你爲什麼不想要繼承它... UIView的子類是理想相同作爲UIView ... – 2010-08-30 05:03:12
你可以說我很懶......但子類將有更多的代碼/類/文件。我只想捕捉觸動,並希望有一個我可以分配給UIView的委託。 – samwize 2010-08-30 05:38:33
hmm ..同樣的問題在這裏,我不想爲了接收觸摸事件而繼承子類。 – rraallvv 2014-01-01 03:18:59