Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIScrollView减速过早_Ios_Uiscrollview_Uiscrollviewdelegate - Fatal编程技术网

Ios UIScrollView减速过早

Ios UIScrollView减速过早,ios,uiscrollview,uiscrollviewdelegate,Ios,Uiscrollview,Uiscrollviewdelegate,我正在使用ScrollViewWillendDraging:withVelocity:targetContentOffset:将我的scrollview捕捉到页面。我根据速度定制了行为。它工作得很好,只是scrollview由于偏移量过大而过早减速。contentOffset在正确的位置结束,但当滚动即将结束时,速度变得非常低,需要大约3-4秒才能达到目标。当尝试滚动3-4个全屏页面时,问题变得更加明显。下面的代码来自一个独立的项目(创建新的单视图项目,在故事板中添加全屏滚动视图,仅安装iPad

我正在使用ScrollViewWillendDraging:withVelocity:targetContentOffset:将我的scrollview捕捉到页面。我根据速度定制了行为。它工作得很好,只是scrollview由于偏移量过大而过早减速。contentOffset在正确的位置结束,但当滚动即将结束时,速度变得非常低,需要大约3-4秒才能达到目标。当尝试滚动3-4个全屏页面时,问题变得更加明显。下面的代码来自一个独立的项目(创建新的单视图项目,在故事板中添加全屏滚动视图,仅安装iPad,横向模式)

仅供参考,更改减速率并不能解决问题(它只会使滚动速度变慢/变快)

#导入“ViewController.h”
@实现视图控制器
@综合滚动视图;
-(无效)viewDidLoad
{
[超级视图下载];
页数=30页;
UIView*arr[页面];
对于(int i=0;ix=scrollView.frame.size.width*scrollToPage;
targetContentOffset->y=0;
NSLog(@“滚动到偏移量%f”,targetContentOffset->x);
}
-(无效)ScrollViewDiEndDecelling:(UIScrollView*)sv{
NSLog(@“ScrollViewDiEndDecelling”);
}
@结束

在与WWDC的一些苹果工程师交谈后,这似乎是iOS中的一个bug。iOS 7中可能没有修复此问题“我正在使用ScrollViewWillendDraging:withVelocity:targetContentOffset:将我的滚动视图捕捉到页面”请问您为什么不使用分页滚动视图?然后,它会为您捕捉页面。这不是一个你需要重新发明的轮子。因为这不允许你滚动超过一页。这个方法应该在那里,这样我就不必重新发明轮子了;-)那么为什么不使用滚动样式的UIPageViewController呢?甚至不是滚动样式。
#import "ViewController.h"

@implementation ViewController
@synthesize scrollView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    pages_ = 30;
    UIView* arr[pages_];
    for (int i = 0; i < pages_; ++i) {
        CGRect frame = CGRectMake(1024 * i, 0, 1024, 768);
        arr[i] = [[UIView alloc] initWithFrame:frame];
        [scrollView addSubview:arr[i]];
        arr[i].backgroundColor = (i%2) ? [UIColor redColor] : [UIColor greenColor];
    }

    scrollView.contentSize = CGSizeMake(1024 * pages_, 768);
    scrollView.delegate = self;
    scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
}

- (void)scrollViewWillEndDragging:(UIScrollView *)sv
                     withVelocity:(CGPoint)velocity
              targetContentOffset:(inout CGPoint *)targetContentOffset {
    CGFloat pageWidth = scrollView.frame.size.width;
    unsigned int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

    int scrollToPage = page + velocity.x*1.5;
    scrollToPage = MAX(0, MIN(scrollToPage, (int)pages_ - 1));
    NSLog(@"Scrolling by %d pages", abs(page-scrollToPage));

    targetContentOffset->x = scrollView.frame.size.width * scrollToPage;
    targetContentOffset->y = 0;
    NSLog(@"Scrolling to offset %f", targetContentOffset->x);
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sv {
    NSLog(@"scrollViewDidEndDecelerating");
}

@end