1

假设我有一个自定义视图,我想向它添加手势识别器。

    UIPanGestureRecognizer* y  = a.panGestureRecognizer;  
    y.minimumNumberOfTouches = 2;
    y.maximumNumberOfTouches = 2;
    [self addGestureRecognizer:y]; 

panGestureRecognizera加到后selfa就不再有 了panGestureRecognizer

我应该怎么做,即使在将 UIPanGestureRecognizer 添加到 后selfa它仍然可以自己拥有(例如复制它)?

我按照meronix的建议尝试了这个,但得到了例外。

 UIPanGestureRecognizer* y  = [a.panGestureRecognizer copy]; //I'm using ARC so I didn't add autorelease.
 [self addGestureRecognizer:y];

-[UIScrollViewPanGestureRecognizer copyWithZone:]: unrecognized selector sent to instance 0x1c5c2460

4

2 回答 2

0

Apple 不提供重复手势的实例。只是因为手势是关联到视图和选择器方法的。您总是必须使用选择器方法为每个视图创建新实例,或者您可以使用相同的方法来获得更多手势。

于 2013-07-11T11:22:59.743 回答
0

如果您只想复制具有当前状态的手势识别器,那么类似:

UIPanGestureRecognizer *r = [[UIPanGestureRecognizer alloc] initWithTarget:self
                                                                    action:action];
r.minimumNumberOfTouches = a.panGestureRecognizer.minimumNumberOfTouches;
r.maximumNumberOfTouches = a.panGestureRecognizer.maximumNumberOfTouches;
[self addGestureRecognizer:r];

但是,如果您想确保rand发生任何更改a.panGestureRecognizer,您可以设置一个辅助类来为您处理。

例如这样的:

@interface GestureHandler: NSObject
// ...
- (void)setNewMinTouches(unsigned int)num;
// Weak references to a and r (for example)
@property (nonatomic, weak) UIPanGestureRecognizer *gestureRecognizerFromA;
@property (nonatomic, weak) UIPanGestureRecognizer *gestureRecognizerR;

@end

@implementation GestureHandler
// ...
- (void)setNewMinTouches(unsigned int)num {
    self.gestureRecognizerFromA.minimumNumberOfTouches = num;
    self.gestureRecognzierR.minimumNumberOfTouches = num;
}
// ... and so on.
@end

然后,您必须小心,您只能通过GestureHandler课程与两个手势识别器进行交互(除非您特别希望它们不同步)。

正如 katzenhut 指出的那样,您还可以根据需要使用此类生成手势识别器。不过,该标准-initWithTarget:action:本身确实非常有用。


顺便说一句,[gestureRecogniser copy]不起作用的原因是因为UIGestureRecognizer没有实现-copy. 因此,当消息发送到手势识别器时,-copy会调用 NSObject 的方法,该方法旨在抛出异常,因为它是子类的覆盖点。

于 2013-07-09T12:58:24.267 回答