0

我目前在我的 MainViewController 中有一个 Web 视图,我允许用户左右滑动手势以便在其 url 历史记录中来回移动(滑动手势调用 UIWebView 类的“goBack”和“goForward”实例方法) . 虽然实用,但我想通过让滑动手势在旧的和最近查看的 webViews/webSites 之间平滑过渡来改善用户体验(类似于在滚动视图中的页面之间过渡的体验)。但是,我不确定继续进行的最佳方法... Apple 专门将此注释放在他们的UIWebView 类参考页上:

重要提示:您不应该在 UIScrollView 对象中嵌入 UIWebView 或 UITableView 对象。如果这样做,可能会导致意外行为,因为两个对象的触摸事件可能会混淆并错误处理。

如何在我的应用中实现此类功能并改善应用的用户体验?

提前致谢!

4

1 回答 1

1

是的,您可以轻松地继承UIWebView并实现

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

这样:

// ViewController.h

@interface APWebView : UIWebView
@end

@interface APViewController : UIViewController <UIGestureRecognizerDelegate>
{
    IBOutlet APWebView *_webview;
}
@end

// ViewController.m

@implementation APWebView

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];

    UISwipeGestureRecognizer *SwipeRecognizerLeft =
  [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeDetected:)];
  SwipeRecognizerLeft.direction = UISwipeGestureRecognizerDirectionLeft;
  [self addGestureRecognizer:SwipeRecognizerLeft];

  UISwipeGestureRecognizer *SwipeRecognizerRight =
  [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeDetected:)];
  SwipeRecognizerRight.direction = UISwipeGestureRecognizerDirectionRight;
  [self addGestureRecognizer:SwipeRecognizerRight];

    return self;
}

- (void) SwipeDetected:(UISwipeGestureRecognizer*)gesture
{
    if ( gesture.direction == UISwipeGestureRecognizerDirectionLeft ) NSLog(@"LEFT");
    else NSLog(@"RIGHT");
}

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    return YES;
}

@end

@implementation APViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [ _webview loadRequest:
         [NSURLRequest requestWithURL:
              [NSURL URLWithString:
                  @"http://www.google.it"]] ];
}

@end

在您的 Xib(或情节提要)上添加 UIWebView 并分配子类:

在此处输入图像描述

在您的控制台日志中,您应该看到:

2013-10-16 09:51:33.861 SwipeLR[14936:a0b] LEFT
2013-10-16 09:51:34.377 SwipeLR[14936:a0b] RIGHT
2013-10-16 09:51:35.009 SwipeLR[14936:a0b] LEFT
[...]

希望这可以帮助。

于 2013-10-16T07:57:49.100 回答