检查scrollview.contentset是否超过了某个x值

时间:2013-05-10 15:16:13

标签: iphone ios objective-c uiscrollview uiscrollviewdelegate

我有一个滚动视图,上面有一些图像。当滚动视图scrollView.contentOffset.x超过某个X时,我上面的图像应该是动画的。

我知道如何动画。目前我正在- (void)scrollViewDidScroll:(UIScrollView *)scrollView方法中执行此操作。

if (scrollView.contentOffset.x == 160) {
 //animate Image
}

但有时会得到160,但有时会超过160.我该如何解决?

3 个答案:

答案 0 :(得分:3)

添加一个实例变量,将其设置为您在上次调用scrollViewDidScroll:时看到的偏移量,并使用它来决定是否要设置动画:

// Instance variable
CGPoint lastOffset;
...
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    ...
    if (lastOffset.x < 160 && scrollView.contentOffset.x >= 160) {
        //animate Image
    }
    lastOffset = scrollView.contentOffset;
}

每次滚动视图从160以下到160以上时,都可以使图像设置动画。

答案 1 :(得分:2)

使用>= 160但也使用标记,以便您知道是否已完成动画:

if (scrollView.contentOffset.x == 160 && !self.animatedImage) {
    self.animatedImage = YES;
    ...
}

答案 2 :(得分:0)

我认为你应该添加一些标志来允许图像动画, 滚动期间/图像动画后管理此标志

BOOL isCanAnimate_;
// some code here


- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{
       if (scrollView.contentOffset.x >= imageView.frame.size.width / 2 && isCanAnimate_) 
       {

        isCanAnimate_ = FALSE;

        [UIView animateWithDuration:2.0 
                              delay:0.0 
                            options:UIViewAnimationOptionAllowUserInteraction
                         animations:^
         {
             // Animation here
         } 
         completion:^(BOOL finished) 
         {
              isCanAnimate_ = TRUE;
         }];
     }
}