4

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

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

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

但有时它会得到 160,但有时它会超过 160。我该如何解决这个问题?

4

3 回答 3

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 时为图像设置动画。

于 2013-05-10T15:21:48.433 回答
2

使用>= 160但也使用一个标志,这样你就知道你是否已经完成了动画:

if (scrollView.contentOffset.x == 160 && !self.animatedImage) {
    self.animatedImage = YES;
    ...
}
于 2013-05-10T15:18:49.827 回答
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;
         }];
     }
}    
于 2013-05-10T18:36:52.103 回答