Когда кто-то выполняет жест протирания для прокрутки содержимого слева направо, я хотел бы, чтобы фоновое изображение прокручивалось в одном направлении, но с другой скоростью. Как и то, что делали эти классические игры 20 лет назад (помните, что кто-нибудь ????)Прокрутка фона с другой скоростью на UIScrollView
ответ
Вы можете сделать это с помощью CoreAnimation. Вы захотите подключиться к методам scrollViewDidEndDragging:willDecelerate:
и scrollViewWillBeginDecelerating:
UIScrollViewDelegate. Затем запустите анимацию на изображении, изменив центральное положение. См. this SO article для получения дополнительной информации о анимации.
Я сделал это, используя два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;
}
Вы можете легко сделать это путем реализации вид прокрутки сделал свиток с 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;
}
Это фантастика. Это должен быть принятый ответ! – quantum
Это абсолютная работа –
Например у вас есть несколько 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];
Het SLF, я попробовал его с основной анимации, но тогда моя прокрутка идет очень медленно и, как Sutch он не чувствует себя хорошо больше. Рис –