objective-c – 如何正确使用swipeWithEvent浏览webView,Obj-C
我想通过使用事件swipeWithEvent来实现我的webView中的第四个导航功能.但是,我不知道如何使用这个.
我有一个主要的webView,和两个方法导航回来和第四.这里的一大问题是我不太清楚如何写这个问题.我只需要知道如何识别我的webView上的滑动手势,并调用我的两种方法.类似于Safari,Google Chrome和Mozilla Firefox.谢谢. 编辑 - (void)swipeWithEvent:(NSEvent *)event { NSLog(@"Swipe With Event"); CGFloat x = [event deltaX]; //CGFloat y = [event deltaY]; if (x != 0) { (x > 0) ? [self goBack:self] : [self goForward:self]; } } -(BOOL)recognizeTwoFingerGestures { NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; return [defaults boolForKey:@"AppleEnableSwipeNavigateWithScrolls"]; } - (void)beginGestureWithEvent:(NSEvent *)event { if (![self recognizeTwoFingerGestures]) return; NSSet *touches = [event touchesMatchingPhase:NSTouchPhaseAny inView:nil]; self.twoFingersTouches = [[NSMutableDictionary alloc] init]; for (NSTouch *touch in touches) { [twoFingersTouches setObject:touch forKey:touch.identity]; } } - (void)endGestureWithEvent:(NSEvent *)event { if (!twoFingersTouches) return; NSSet *touches = [event touchesMatchingPhase:NSTouchPhaseAny inView:nil]; // release twoFingersTouches early NSMutableDictionary *beginTouches = [twoFingersTouches copy]; self.twoFingersTouches = nil; NSMutableArray *magnitudes = [[NSMutableArray alloc] init]; for (NSTouch *touch in touches) { NSTouch *beginTouch = [beginTouches objectForKey:touch.identity]; if (!beginTouch) continue; float magnitude = touch.normalizedPosition.x - beginTouch.normalizedPosition.x; [magnitudes addObject:[NSNumber numberWithFloat:magnitude]]; } // Need at least two points if ([magnitudes count] < 2) return; float sum = 0; for (NSNumber *magnitude in magnitudes) sum += [magnitude floatValue]; // Handle natural direction in Lion BOOL naturalDirectionEnabled = [[[NSUserDefaults standardUserDefaults] valueForKey:@"com.apple.swipescrolldirection"] boolValue]; if (naturalDirectionEnabled) sum *= -1; // See if absolute sum is long enough to be considered a complete gesture float absoluteSum = fabsf(sum); if (absoluteSum < kSwipeMinimumLength) return; // Handle the actual swipe if (sum > 0) { [self goForward:self]; } else { [self goBack:self]; } } 但是,这段代码没有做任何事情.它似乎没有被调用. 解决方法
对于现代操作系统(Lion和更新版),这是“我如何用Y做X”之一?答案是“不要使用Y”的问题
-swipeWithEvent:用于实现10.6风格的触控板滑动,屏幕上的内容不会随着滑动而移动.大多数Mac轨迹笔没有配置为允许这种滑动了;必须将Trackpad pref窗格中的“在页面之间滑动”首选项设置为“用三个手指滑动”才能使用,这不是默认设置,也不是用户更改的常用设置. 狮子式“流畅的滑动”代替进入滚动事件. Xcode SDK中的PictureSwiper示例项目是一个很好的开始,但作为一个概述,您的工作如下: >如果您只需要支持Mountain Lion,请使用历史堆栈模式中的NSPageController,并跳过其余的乱码. >放置一个NSImageView,将要返回/转发的页面的屏幕截图放在网页视图的后面. 正如你所看到的,实际执行处理程序是非常重要的,我甚至没有描述所有的细节.即使所有这些细节,一个高度熟练的程序员可能不得不花几天时间才能正确. 10.7 SDK中的PictureSwiper示例是开始的好地方. (10.8版本的PictureSwiper使用NSPageController,就像你应该做的) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |