Rumah > Soal Jawab > teks badan
scrollViewDidEndDecelerating
scrollViewDidEndScrollingAnimation
scrollViewDidEndDragging
这三个方法都不对
怪我咯2017-04-17 18:01:44
Tambahkan kod yang tersedia, harus ada cara yang lebih baik, untuk rujukan sahaja:
//
// 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
Tampalkannya ke dalam ViewController.m projek paparan tunggal yang baru dibuat, dan kemudian seret paparan skrol pada papan cerita.
Tiada keadaan pratakrif untuk ini.
UIScrollViewDelegate - scrollViewDidScroll:
akan dipanggil selepas julat visual paparan skrol berubah, yang lebih dekat dengan penerangan anda.
tidak mencukupi, laksanakan sendiri dan rekod masa apabila jari anda bergerak ke dalam - scrollViewDidScroll:
. Kemudian pantau perbezaan antara masa semasa dan masa yang direkodkan Jika melebihi masa tertentu, ia dianggap bahawa jari telah berhenti.
- scrollViewWillBeginDragging:
akan dipanggil apabila anda mula menyeret - scrollViewDidScroll:
akan dipanggil setiap kali data berubah sedikit - scrollViewWillEndDragging:withVelocity:targetContentOffset:
akan dipanggil apabila jari keluar.
PHP中文网2017-04-17 18:01:44
Apabila jari anda tidak bergerak dan tidak meninggalkan ScrollView, ia tidak akan bertindak balas kepada mana-mana kaedah ScrollView.
Saya menyeret dan kemudian berhenti, tetapi jari saya tidak keluar.
Apabila scrollViewDidScroll
tidak bertindak balas dan scrollViewDidEndDragging
juga tidak bertindak balas, ini bermakna jari anda tidak menggelongsor tetapi masih berada pada ScrollView.