2009-09-01 3 views
4

Когда кто-то выполняет жест протирания для прокрутки содержимого слева направо, я хотел бы, чтобы фоновое изображение прокручивалось в одном направлении, но с другой скоростью. Как и то, что делали эти классические игры 20 лет назад (помните, что кто-нибудь ????)Прокрутка фона с другой скоростью на UIScrollView

ответ

2

Вы можете сделать это с помощью CoreAnimation. Вы захотите подключиться к методам scrollViewDidEndDragging:willDecelerate: и scrollViewWillBeginDecelerating:UIScrollViewDelegate. Затем запустите анимацию на изображении, изменив центральное положение. См. this SO article для получения дополнительной информации о анимации.

+0

Het SLF, я попробовал его с основной анимации, но тогда моя прокрутка идет очень медленно и, как Sutch он не чувствует себя хорошо больше. Рис –

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

+0

Это абсолютная работа –

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]; 

 Смежные вопросы

  • Нет связанных вопросов^_^