2009-09-01 30 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];