【问题标题】:check if scrollview.contentset went over certain x value检查 scrollview.contentset 是否超过了某个 x 值
【发布时间】:2013-05-05 07:54:23
【问题描述】:
我有一个滚动视图和一些图像。当滚动视图 scrollView.contentOffset.x 超过某个 X 时,我上面的图像应该动画。
我知道如何制作动画。目前我正在- (void)scrollViewDidScroll:(UIScrollView *)scrollView 方法中执行此操作。
if (scrollView.contentOffset.x == 160) {
//animate Image
}
但有时它会得到 160,但有时它会超过 160。我该如何解决这个问题?
【问题讨论】:
标签:
iphone
ios
objective-c
uiscrollview
uiscrollviewdelegate
【解决方案1】:
添加一个实例变量,将其设置为您在上次调用 scrollViewDidScroll: 时看到的偏移量,并使用它来决定您是否要制作动画:
// Instance variable
CGPoint lastOffset;
...
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
...
if (lastOffset.x < 160 && scrollView.contentOffset.x >= 160) {
//animate Image
}
lastOffset = scrollView.contentOffset;
}
这可以让您在每次滚动视图从低于 160 到高于 160 时为图像设置动画。
【解决方案2】:
使用>= 160,但也使用一个标志,这样你就知道你是否已经完成了动画:
if (scrollView.contentOffset.x == 160 && !self.animatedImage) {
self.animatedImage = YES;
...
}
【解决方案3】:
我认为你应该添加一些标志来允许图像动画,
并在滚动/图像动画后管理此标志
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;
}];
}
}