Maison > Questions et réponses > le corps du texte
scrollViewDidEndDecelerating
scrollViewDidEndScrollingAnimation
scrollViewDidEndDragging
这三个方法都不对
怪我咯2017-04-17 18:01:44
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.
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.
PHP中文网2017-04-17 18:01:44
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.