2

私はiPhone開発者の初心者ですが、

私はepubリーダーを作成し、epubの各ページを自分webviewportrait mode

webview.scalesPageToFit=TRUE;

しかし、横向きモードのページでアプリケーションが適切に収まっているのを見ると、スクロールすると発生するためswiperight gesture、スクロールの終わりに達したときに追加して、ユーザーが次のページに移動できるようにしたいrightswipe.

webviewがスクロールを完了したことを伝える方法はありますか?

_要するに、UIWebViewが上または下に到達したことを検出する方法は?_

前もって感謝します !

で書かれた編集 がロードされました:

    swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self  action:@selector(swipeRightAction:)];
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
    swipeRight.delegate = (id<UIGestureRecognizerDelegate>)self;
    [_webview addGestureRecognizer:swipeRight];

    swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftAction:)];
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
    swipeLeft.delegate = (id<UIGestureRecognizerDelegate>)self;
    [_webview addGestureRecognizer:swipeLeft];

次に、各ページの読み込み中に、縦向きの場合は向きを確認し、横向きの場合は上下のジェスチャーをさらに2つ追加してから、上下のジェスチャーを削除します。

if([UIApplication sharedApplication].statusBarOrientation==UIInterfaceOrientationPortrait || [UIApplication sharedApplication].statusBarOrientation==UIInterfaceOrientationPortraitUpsideDown) {

        swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self  action:@selector(swipeLeftAction:)];
        swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
        swipeUp.delegate = (id<UIGestureRecognizerDelegate>)self;
        [_webview addGestureRecognizer:swipeUp];

        swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self  action:@selector(swipeRightAction:)];
        swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
        swipeDown.delegate = (id<UIGestureRecognizerDelegate>)self;
        [_webview addGestureRecognizer:swipeDown];

        counterPort++;
        counterLand=0;
      }
    }

    if (counterLand==0) {

        if([UIApplication sharedApplication].statusBarOrientation==UIInterfaceOrientationLandscapeLeft || [UIApplication sharedApplication].statusBarOrientation==UIInterfaceOrientationLandscapeRight) {

            [_webview removeGestureRecognizer:swipeDown];
            [swipeDown release];
            swipeDown=nil;

            [_webview removeGestureRecognizer:swipeUp]; 
            [swipeUp release];
            swipeUp=nil;

            counterPort=0;
            counterLand++;
        }

あなたの提案の後:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    float scrollViewHeight = scrollView.frame.size.height;
    float scrollContentSizeHeight = scrollView.contentSize.height;
    float scrollOffset = scrollView.contentOffset.y;

    if (scrollOffset == 0)
    {
        swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self  action:@selector(swipeLeftAction:)];
        swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
        swipeUp.delegate = (id<UIGestureRecognizerDelegate>)self;
        [_webview addGestureRecognizer:swipeUp];  
    }
    else if (scrollOffset + scrollViewHeight == scrollContentSizeHeight)
    {
        swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self  action:@selector(swipeRightAction:)];
        swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
        swipeDown.delegate = (id<UIGestureRecognizerDelegate>)self;
        [_webview addGestureRecognizer:swipeDown];
    }
}
4

1 に答える 1

1

iOS 5.0 以降では、プロパティにアクセスできUIWebView's scrollViewます。その scrollView のデリゲートをオブジェクトに設定すると、いつ上または下に達したかがわかります。変更する前に、以前の scrollview デリゲートへの参照を保持していることを確認してください。

 _defaultDelegate=[webview.scrollView.delegate retain];
 webview.scrollView.delegate=myController;

あなたの_defaultDelegate宣言は

id <UIScrollViewDelegate> _defaultDelegate;

これで、 myController の の実装でscrollViewDidScroll:、スクロールがページの最後または最初に達したかどうかを確認できます。

注意が必要なのは、他の UIScrollViewDelegate メソッドを実装し、デフォルトのデリゲートに渡して、webview がデフォルトの動作を失わないようにする必要があることです。だから、あなたはそのように実装します

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {
    [_defaultDelegate scrollViewDidScrollToTop:scrollView];
}

scrollView が上または下にスクロールするかどうかを調べるには、この回答を参照してください: iPhone - UIScrollView が上または下に達したかどうかを知る

編集:コードを読んだ後、そのようなジェスチャ認識機能を追加および削除する必要はないと思います。可能なすべてのスワイプ方向をカバーする 4 つのジェスチャ レコグナイザーを作成し、それを の Web ビューに追加しviewDidLoadます。メソッドを実装することで、ジェスチャ認識エンジンが応答するかどうかを制御できます。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

各ジェスチャ認識エンジンのデリゲートを設定し、他の UIGestureRecognizerDelegate メソッドもチェックアウトすることを忘れないでください。ビュー コントローラには、アクセス可能なプロパティ interfaceOrientation があります。

スクロールの問題を解決するには、BOOL iVar を使用して、コードの一番下にいるかどうかを示してみてください。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    float scrollViewHeight = scrollView.frame.size.height;
    float scrollContentSizeHeight = scrollView.contentSize.height;
    float scrollOffset = scrollView.contentOffset.y;
    _atBottom=NO;
    if (scrollOffset == 0)
    {
        swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self  action:@selector(swipeLeftAction:)];
        swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
        swipeUp.delegate = (id<UIGestureRecognizerDelegate>)self;
        [_webview addGestureRecognizer:swipeUp];  
    }
    else if (scrollOffset + scrollViewHeight == scrollContentSizeHeight)
    {
        swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self  action:@selector(swipeRightAction:)];
        swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
        swipeDown.delegate = (id<UIGestureRecognizerDelegate>)self;
        [_webview addGestureRecognizer:swipeDown];
        _atBottom=YES;
    }
}

UIGestureRecognizerDelegate メソッドを実装する

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    return _atBottom;
}
于 2012-06-25T07:50:39.337 に答える