Прошу прощения за то, что я такой новичок. Я просмотрел несколько руководств по UIGestureRecognizer и увидел несколько очень полезных ответов на SO, но создание этой уникальной комбинации жестов ускользает от меня. Вот подробности. Заранее спасибо за помощь!
FooViewController со своим собственным .xib в построителе интерфейса вписывается в эту иерархию в iOS7:
UIPopover
>> PageViewController
>> FooViewController
>> View (built in .xib)
>> scrollView (just a UIScrollView)
>> DrawingView (a UIView subclass that has touch drawing capabilities)
Его также иногда заменяют подклассом, мы назовем его FooViewControllerSubclass : FooViewController
. Вот жесты, которые я создаю:
- При использовании FooViewControllerSubclass вместо FooViewController UIPopover должен получать жесты ущипнуть, вызывая его закрытие. В противном случае вам не нужно беспокоиться о защемлении.
- scrollView должен получать жесты twoFingerPan, вызывающие прокрутку.
- DrawingView должен получить все оставшиеся oneFingerGestures, вызывающие отрисовку.
В настоящее время 1 и 3 отлично работают. Но для 2 twoFingerPanning просто вызывает действие защемления 1. Если я закомментирую это щипковое действие, тогда twoFingerPanning просто приведет к действиям рисования oneFinger 3 в DrawingView. Краткое изложение кода находится здесь:
@implementation FooViewController
- (id)init
{
self = [super init];
[[NSBundle mainBundle] loadNibNamed:@"FooViewController" owner:self options:nil];
if (self) {
UIPanGestureRecognizer *panGR = self.scrollView.panGestureRecognizer;
panGR.minimumNumberOfTouches = 2;
}
@end
@implementation FooViewControllerSubclass
- (id)init
{
self = [super initWithWb:wb];
if (self) {
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerPinch:)];
[[self view] addGestureRecognizer:pinchRecognizer];
}
return self;
}
...
- (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer
{
if ([[[self nextResponder] nextResponder] isKindOfClass:([PageViewController class])]) {
[[(PageViewController*)[[self nextResponder] nextResponder] popover] dismissPopoverAnimated:YES];
}
}
@end
@implementation DrawingView
{
...
- (void)drawRect:(CGRect)rect{
//Does a bunch of basic drawing stuff using touchesBegan, touchesMoved, etc.
}
}
@end
В качестве примечания: мне также любопытно, является ли вся эта [[self nextResponder] nextResponder]
часть вообще кошерной (потому что она работает), и если нет, то как я должен передавать эту информацию вверх по иерархии.
Спасибо!