我正在设计一个迷你绘图应用程序,其中我必须通过执行3指滑动手势添加用于启动颜色选择器模态视图的功能。对于处理手势,需要手势识别器,但我使用简单的UIResponder方法,如touchesBegan,touchesMoved和touchesEnded / touchesCancelled方法。 当我在绘图视图上运行3个手指时,需要显示颜色选择器模态视图。所以我所做的就是我已经加载了一个自定义模态视图控制器,用于在用户从主视图中移除他/她的3个手指时将其特定视图作为XIB文件启动。该视图将以模态呈现。模态视图代码位于touchesEnded:方法中。 这是代码: -
-(void)endTouches:(NSSet *)touches{
// Remove ending touches from dictionary
NSLog(@"touches- %lu",(unsigned long)touches.count);
for (UITouch *touch in touches) {
NSValue *key= [NSValue valueWithNonretainedObject:touch];
NSLog(@"key- %@,touch- %@",key,touch);
Line *line= [linesInProcess objectForKey:key];
NSLog(@"line-%@",line);
// If this is a double tap, 'line' will be nil, so make sure not to add it to the array
if (line) {
[self.rootObj.completeLines addObject:line];
NSLog(@"lines made- %@",self.rootObj.completeLines);
[linesInProcess removeObjectForKey:key];
}
}
if (touches.count==3) {
NSLog(@"3 finger swipe");
ColorPickerController *colorPicker= [[ColorPickerController alloc] init];
[colorPicker setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[colorPicker setModalPresentationStyle:UIModalPresentationFormSheet];
[self.window.rootViewController presentViewController:colorPicker animated:YES completion:nil];
}
// Redraw
[self setNeedsDisplay];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"%@",NSStringFromSelector(_cmd));
[self endTouches:touches];
}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"%@",NSStringFromSelector(_cmd));
[self endTouches:touches];
}
在上面的代码片段中,endTouches只是一个自定义方法,可以根据适当的情况通过touchesEnded或touchesCancelled调用。 我正在设备上测试这个以模拟3指触摸。执行此操作后,删除手指时,touchesEnded:代码运行,控件到达'if(touches.count == 3)'块。这是应该加载颜色选择器模态视图(挂钩到ColorPickerController的XIB文件)的时候。但令我震惊的是,手势后没有任何事情发生。我不明白为什么会发生这种情况。请帮助任何人。