2013-09-06 4 views
1

Как я уже говорил в названии выше, я хочу изменить фоновый рисунок изображения, анимировать и заменить другим изображением, пока прокручивается uiscrollview. моя uiviewcontroller иерархия проста:Как изменить фон изображения при прокрутке uiscrollview?

UIViewController --->UIImageView --->UIScrollView

дополнительная информация о UIScrollView: 1. мой UIScrollView содержит простой uilabel и некоторые uiimageview (только небольшая часть в качестве подзадачи uiscrollview). 2. пейджинг включен 3. прокрутите по горизонтали (если это так)

так, может кто-нибудь здесь, пожалуйста, помогите мне, как выполнить этот метод? просто простая подсказка будет очень оценена, поскольку я все еще новичок, но я хочу учиться у всех мастеров здесь.

Большое вам спасибо за помощь и пожелайте вам приятного дня.

+0

Как вы создаете фоновый рисунок изображения? Используете ли вы UIImageView, растянутый по представлению?, Или вы настроили его прогмармально? – CaptJak

+0

Да, я использую uiimageview, растянутый, заполняет контроллер вида. – redribbon

ответ

1

Существует и другой способ сделать это (аккуратнее ИМО):

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    UIImage * toImage = [UIImage imageNamed:@"myname.png"]; 
    [UIView transitionWithView:self.view 
       duration:5.0f 
       options:UIViewAnimationOptionTransitionCrossDissolve 
       animations:^{ 
       self.imageView.image = toImage; 
       } completion:nil]; 
} 

EDIT

Для нескольких изображений/страниц и переключаться между ними, Было бы лучше использовать

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

Таким образом, у вас не будет конфликтов при смене страниц.

Чтобы получить соответствующие изображения, вы должны использовать оператор switch, что также означает, что вам нужно будет связывать ваши страницы с цифрами. Поскольку Apple не включила это как свойство UIScrollView, вы должны получить данные самостоятельно с помощью:

int page = scrollView.contentOffset.x/scrollView.frame.size.width; 

А потом добавить все это вместе в хорошем методе: гаванью

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    int page = scrollView.contentOffset.x/scrollView.frame.size.width; 

    //Use the switch to set the variable (toImage) depending on the page 
    switch (page){ 
        case 0: UIImage * toImage = [UIImage imageNamed:@"imageOne.png"]; 
        break; 
        case 1: UIImage * toImage = [UIImage imageNamed:@"imageTwo.png"]; 
        break; 
        case 2: UIImage * toImage = [UIImage imageNamed:@"imageThree.png"]; 
        break; 
        case 3: UIImage * toImage = [UIImage imageNamed:@"imageFour.png"]; 
        break; 
       } 

     //use the variable (toImage) and perform the transition from the current image 

     [UIView transitionWithView:self.view 
            duration:5.0f 
            options:UIViewAnimationOptionTransitionCrossDissolve 
            animations:^{ 
            self.imageView.image = toImage; 
            } completion:nil]; 
} 

I 't проверил вышеуказанный код, но из моих знаний о C и Obj C он должен работать.

+0

спасибо captjak, этот работает. но как, если у меня есть 4 страницы (пейджинг включен) в uiscrollview, и я хочу, чтобы каждая страница представляла другое изображение? – redribbon

+0

@redribbon, проверьте мое редактирование. Любой код и ваш платный мне;) – CaptJak

+0

Вау, большое спасибо моему другу. этот код действительно помогает мне достичь эффекта. все еще нужно несколько работ, но легко. так что да, я использовал didenddecelerating вместо прокрутки, но спасибо за подсказку. также вы должны начать с случая 0 вместо случая 1 или ваша вторая страница не изменится, а последняя - в каждом случае вам нужно добавить фигурные скобки или код просто не работает: D (например: case 1: {} break ; .......... хорошо, я больше не буду вас беспокоить, так как я не хочу получать платеж от проверки бумаги у вас: p – redribbon

1

Я думаю, что вы можете попробовать этот код

Шаг 1: Добавьте UIScrollViewDelegate в свой UIViewController

Шаг 2: Attache делегат UIScrollView на свой UIViewController (XIB или StoryBoard)

Шаг 3: Контроллер реализации реализует этот делегат-метод

-(void) scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
     [UIView animateWithDuration:0.5 
        animations:^{ 
         [self<UIImageView> setAlpha:0]; 
        } 
    ]; 

    [self<UIImageView> setImage:<Your second image>] 

    [UIView animateWithDuration:0.5 
        animations:^{ 
         [self<UIImageView> setAlpha:1]; 
        } 
    ]; 

} 

возможно, что scrollViewDidScroll: de Легат его более рассудительным должны проверить

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