Abu*_*air 3 iphone core-animation objective-c uiscrollview ios
我试图在以下委托方法中修改我的滚动的contentOffset:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
我尝试了以下两种方法:
[UIView animateWithDuration:.2 animations:^ {
   [scrollView setContentOffset:CGPointZero animated:NO];
}];
和
[UIView animateWithDuration:.2 animations:^ {
   CGRect svBounds = self.bounds;
   svBounds.origin.y = 0;
   self.bounds = svBounds; 
}];
问题是虽然这会立即改变偏移(在动画完成后通过日志证明),但它不会改变可见的滚动位置.我的滚动视图的后续委托方法进一步证明了这一点,它表明边界确实没有改变.意味着y位置不为0.
是否禁止在此特定委托方法中更改内容偏移量?如果是这样,我什么时候可以改变偏移?我正在尝试执行动画,一旦用户完成拖动(在一定量之后),将可见滚动区域返回到顶部.
谢谢!
我最终做的是再次调度到主队列.含义:
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSLog(@"END DRAG");
CGFloat yVelocity = [scrollView.panGestureRecognizer velocityInView:scrollView].y;
if (yVelocity < 0) {
    NSLog(@"Up");
} else {
    NSLog(@"Down");
}
if (yVelocity < 0 && scrollView.contentOffset.y < -100 && scrollView.contentOffset.y > -200) //UP - Hide
{
    NSLog(@"hiding");
    dispatch_async(dispatch_get_main_queue(), ^{
        [scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
    });
}
else if (yVelocity > 0 && scrollView.contentOffset.y < -100) //DOWN - Show
{
    NSLog(@"showing");
    dispatch_async(dispatch_get_main_queue(), ^{
        [scrollView setContentOffset:CGPointMake(0, -300) animated:YES];
    });
}
}
它确实有效:-)
| 归档时间: | 
 | 
| 查看次数: | 2151 次 | 
| 最近记录: |