0

私のアプリケーションには、複数の種類のコンテンツ (画像、pdf、テキストなど) を UIWebView に表示するファイル ビューアーがあります。

次のページにフリップするためのスワイプ コントロールがありますが、これらは通常、画像が Web ビューよりも小さく、スクロールが必要ない限り正常に機能します。そのためのコードは次のとおりです。

UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self  action:@selector(swipeRightAction:)];
swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
swipeRight.delegate = self;
[webView addGestureRecognizer:swipeRight];

ただし、画像が大きすぎると、スワイプ コントロールが機能しなくなります。人々が同様のことを試みたが成功しなかった他のいくつかの質問を読みました。

UIWebView をサブクラス化するための提案を見てきましたが、このアプローチでもうまくいきませんでした。

一貫して動作するスワイプ コントロールを UIWebView に追加する方法はありますか?

4

1 に答える 1

0

私の場合、最終的には、この機能するサブクラス化 UIWebView を取得することができました。また、方向スワイプが実行されたときに呼び出される新しいデリゲートも作成しました。

これは最善の解決策ではないかもしれませんが、シンプルで再利用可能で機能します。

基本的なコードの一部を次に示します。

@interface SwipableWebView : UIWebView <UIGestureRecognizerDelegate>{
   id swipeableWebViewDelegate;
}
@property (nonatomic, retain) id <SwipableWebViewDelegate> swipeableWebViewDelegate;
@end


@implementation SwipableWebView{

}

@synthesize swipeableWebViewDelegate;

- (id)initWithCoder:(NSCoder *)aDecoder{
  self = [super initWithCoder:aDecoder];
  if (self) {
      UISwipeGestureRecognizer  * swipeRight = [[UISwipeGestureRecognizer     alloc]initWithTarget:self action:@selector(swipeRight:)];
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
    [self addGestureRecognizer:swipeRight];
    swipeRight.delegate = self;

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


    UISwipeGestureRecognizer  * swipUp = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeUp:)];
    swipUp.direction = UISwipeGestureRecognizerDirectionUp;
    [self addGestureRecognizer:swipUp];
    swipUp.delegate = self;

    UISwipeGestureRecognizer  * swipeDown = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeDown:)];
    swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
    [self addGestureRecognizer:swipeDown];
    swipeDown.delegate = self;
  }
  return self;
}



-(void)swipeLeft:(id)swipe{
  [swipeableWebViewDelegate webViewSwipeLeft:swipe];
}

-(void)swipeRight:(id)swipe{
  [swipeableWebViewDelegate webViewSwipeRight:swipe];
}

-(void)swipeUp:(id)swipe{
  [swipeableWebViewDelegate webViewSwipeUp:swipe];
}

-(void)swipeDown:(id)swipe{
  [swipeableWebViewDelegate webViewSwipeDown:swipe];
}

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

@end



@protocol SwipableWebViewDelegate <NSObject>
 -(void)webViewSwipeLeft:(id)swipe;
 -(void)webViewSwipeRight:(id)swipe;
 -(void)webViewSwipeUp:(id)swipe;
 -(void)webViewSwipeDown:(id)swipe;
@end
于 2013-01-25T15:08:40.897 に答える