【问题标题】:Moving UIImageView in relation to UIScrollView movement相对于 UIScrollView 移动移动 UIImageView
【发布时间】:2014-08-20 09:15:06
【问题描述】:

在 self.view 下我有一个名为 self.scrollView 的 UIScrollView,在 self.scrollView 下我有两个名为 self.panedView 和 self.recordView 的 UIViews。我的 self.panedView 的高度为 568,Y 原点为 0,self.recordView 的高度为 274,Y 原点为 568。我的 self.scrollView 的内容大小高度等于 842 的高度( self.panedView 的高度 + self.recordView 的高度)。我想在 self.panedView 上添加一个名为 self.iconImageView 的UIImageView,这样当我滚动时,imageView 将向上移动到与我滚动量相关的某个位置。 self.iconImageView 的 Y 位置为 184,只是 self.view 的子类。每当通过执行以下操作检测到向上滑动时,我最初都会使用 UIView animationWithDuration 移动 self.iconImageView:

- (void)viewDidLoad
{
    [self.view insertSubview:self.iconImageView aboveSubview:self.panedView];
}

[UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
    self.iconImageView.frame = CGRectOffset(self.iconImageView.frame, 0, -85.5);
} completion:nil];

既然我已经切换到UIScrollView,我该如何复制它?我在想这样的事情可能会奏效:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{

 if(self.iconImageView.center.y >= 184 && self.iconImageView.center.y <=451)
    {
    CGPoint newCenter = CGPointMake(self.view.bounds.size.width/2, self.iconImageView.center.y + (self.scrollView.contentOffset.y/self.scrollView.contentOffset.y));
    self.iconImageView.center = newCenter;
    }
}

【问题讨论】:

  • 为什么不直接将 UIImageView 添加为 pannedView 的子视图?或者直接将它添加到您的 pannedView 之上,但作为 UIScrollView 的子视图。
  • 我认为将它作为 pannedView 的子视图包含在内会使它变得更加棘手。如果它不在scrollView下,至少我可以采用scrollView的垂直contentOffSet并通过更改imageView中心Y或执行CGRectOffset来转换我的imageView的Y原点以相应移动。它没有像我希望的那样工作。
  • 所以最初我将 panedView 和 iconImageView 移动到我希望它们在检测到滑动时使用 UIView animationWithDurationCGRectOffset 的位置。但是,现在我使用 scrollView.contentOffset 来翻译 iconImageView 以相对于内容视图的移动进行移动。这样做的问题是 iconImageView 到达了它应该停止的地方,而 panedView 距离它的停止点还有很长的路要走。

标签: ios cocoa-touch uiscrollview uiimageview


【解决方案1】:

实现UIScrollViewDelegate。每当滚动视图滚动(甚至以编程方式)时,您都会收到一个事件。

【讨论】:

  • 我会使用scrollViewDidScroll:吗?
  • 是的,你必须使用scrollViewDidScroll。获取滚动视图的 contentOffset 就知道它滚动了多少。
  • 我可以让 imageView 与 scrollView 一起移动,但 imageView 的移动与偏移量的移动不成比例。与滚动视图的移动相比,图像向上移动的速度太快了。代码包含在上面。
  • 使用if(self.iconImageView.center.y &gt;= 177.5) { [UIView animateWithDuration....] } 或删除if(self.iconImageView.center.y &gt;= 177.5) 这应该会在您滚动时移动图像。目前它等到你达到阈值,然后突然移动。
  • 我在上面的scrollViewDidScroll 中为我的iconImageView 编辑了我的限制。我注意到的是,如果我慢慢滚动,iconImageView 会遵循我设置的限制。但是,如果我滚动得非常快,它不会遵循我在 scrollViewDidScroll 中设置的限制
猜你喜欢
  • 1970-01-01
  • 2011-08-10
  • 2017-08-16
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2014-10-16
相关资源
最近更新 更多