2009-09-01 75 views

回答

2

你可以用CoreAnimation来做到这一点。你会想要钩入scrollViewDidEndDragging:willDecelerate:scrollViewWillBeginDecelerating:UIScrollViewDelegate方法。然后通过更改中心位置在图像上开始动画。有关动画的更多信息,请参阅this SO article

+0

的Het SLF,我尝试了与核心动画,但后来我去滚动很慢得多,因为它sutch不觉得好了。里斯 – 2009-09-09 13:47:46

5

我通过使用两个UIScrollView实例完成了这个实例。第一个是显示实际内容的位置,第二个(位于第一个z顺序后面)是我的移动速度较慢的背景。从那里,顶部UIScrollView有一个代理附加到它,contentOffset更改时得到通知。该代表反过来以编程方式设置背景滚动器的contentOffset,与常数相乘以减慢相对于前景的向下滚动。所以,举例来说,你可能有这样的:

// Defined as part of the delegate for the foreground UIScrollView 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    UIScrollView* scroll_view(static_cast<UIScrollView*>(bkg_scroller_m.view)); 
    CGPoint  offset(scrollView.contentOffset); 

    offset.x = offset.x/3; 
    offset.y = offset.y/3; 

    // Scroll the background scroll view by some smaller offset 
    scroll_view.contentOffset = offset; 
} 
3

,您可以轻松实现滚动视图下它与一个UIImageView并滚动做到这一点... 你有这样的事情结束了...与backgroundImageView是一个UIImageView添加到视图子视图之前......你可以为你想不性能问题

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    {  
     float factor = scrollView.contentOffset.x/(scrollView.contentSize.width - 320); 
     if (factor < 0) factor = 0; 
     if (factor > 1) factor = 1; 

     CGRect frame = backgroundImageView.frame; 
     frame.origin.x = factor * (320 - backgroundImageView.frame.size.width); 
     backgroundImageView.frame = frame; 
    } 
+0

这太棒了。这应该是被接受的答案! – quantum 2012-07-14 01:13:31

+0

这是绝对的工作 – 2014-12-16 05:11:46

0

例如,你有多个scrollviews层尽可能多的图像意见,希望他们滚动差别速度。这里是Salamatizm答案修改代码库:

CGSize screenSize = [[UIScreen mainScreen] bounds].size; 
    float factor = scrollView.contentOffset.x/(scrollView.contentSize.width - screenSize.width); 
    if (factor < 0) factor = 0; 
    if (factor > 1) factor = 1; 

    CGSize parralaxSize = self.parralaxBackgroundView.contentSize; 
    CGPoint parallaxOffset = CGPointMake(-(factor * (screenSize.width - parralaxSize.width)), 0); 
    [self.parralaxBackgroundView setContentOffset:parallaxOffset animated:NO];