ios - uiscrollview 在用户停止拖拽但是手指没有离开的时候,会调用哪个方法?
PHP中文网
PHP中文网 2017-04-17 17:59:44
0
2
261
scrollViewDidEndDecelerating  
scrollViewDidEndScrollingAnimation
scrollViewDidEndDragging

这三个方法都不对

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(2)
刘奇

Complétez les codes disponibles, il devrait y avoir un meilleur moyen, à titre de référence uniquement :

//
//  ViewController.m
//  ffff
//
//  Created by Alan Zhang on 16/5/16.
//  Copyright © 2016年 Alan's Lab. All rights reserved.
//

#import "ViewController.h"

@interface ViewController () <UIScrollViewDelegate>

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (strong, nonatomic) NSTimer *timer;
@property (weak, nonatomic) UIPanGestureRecognizer *pan;

@end

@implementation ViewController

- (void)viewDidLoad
{
    self.scrollView.delegate = self;
    self.scrollView.contentSize = CGSizeMake(400, 400);
    self.pan = self.scrollView.panGestureRecognizer;
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if (self.timer) {
        [self.timer invalidate];
        self.timer = nil;
    }
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (!self.timer && self.pan.state == UIGestureRecognizerStateChanged) {
        self.timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(stateDetection) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    }
}

- (void)stateDetection
{
    static CGPoint lastPos;
    if (!CGPointEqualToPoint(lastPos, [self.pan translationInView:self.scrollView])) {
        lastPos = [self.pan translationInView:self.scrollView];
    } else if (self.pan.state == UIGestureRecognizerStateChanged) {
        if (self.timer) {
            [self handleState];
            [self.timer invalidate];
            self.timer = nil;
        }
    }
}

- (void)handleState
{
        NSLog(@"Finger Stopped State");
}

@end

Collez-le dans ViewController.m du projet à vue unique nouvellement créé, puis faites glisser une vue défilante sur le storyboard.


Il n'y a pas d'état prédéfini pour cela.

Le

de - scrollViewDidScroll:UIScrollViewDelegate sera appelé après les changements de plage visuelle de scrollview, qui est plus proche de votre description.

Si

ne suffit pas, mettez-le en œuvre vous-même et enregistrez l'heure à laquelle votre doigt entre en - scrollViewDidScroll:. Surveillez ensuite la différence entre l'heure actuelle et l'heure enregistrée. Si elle dépasse un certain temps, on considère que le doigt s'est arrêté.


- scrollViewWillBeginDragging: sera appelé lorsque vous commencerez à faire glisser
- scrollViewDidScroll: sera appelé à chaque fois que les données changent un peu
- scrollViewWillEndDragging:withVelocity:targetContentOffset: sera appelé lorsque le doigt partira.

洪涛

Lorsque votre doigt ne bouge pas et ne quitte pas ScrollView, il ne répondra à aucune méthode ScrollView.


J'ai traîné puis je me suis arrêté, mais mon doigt n'est pas parti. Y a-t-il un moyen d'entrer dans cet état ?

Quand scrollViewDidScroll ne répond pas et scrollViewDidEndDragging ne répond pas non plus, cela signifie que votre doigt ne glisse pas mais est toujours sur le ScrollView.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal