Прокрутите фон с другой скоростью на UIScrollView - PullRequest
4 голосов
/ 01 сентября 2009

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

Ответы [ 4 ]

5 голосов
/ 10 октября 2009

Я сделал это, используя два 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 голосов
/ 09 июня 2011

Вы можете легко сделать это, внедрив представление прокрутки и прокручивая с 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;
    }
2 голосов
/ 01 сентября 2009

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

0 голосов
/ 16 декабря 2014

Например, у вас есть несколько видов прокрутки, вы хотите, чтобы они отличались скоростью прокрутки. Вот код модификации базы по саламатизму ответа:

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