如何在滚动uiscrollview时更改图像背景?

时间:2013-09-06 19:34:26

标签: iphone ios objective-c uiscrollview

正如我在上面的标题中已经说过的那样,我希望在滚动uiscrollview时动画淡化图像背景并替换为另一个图像。我的uiviewcontroller层次结构很简单:

的UIViewController --->的的UIImageView --->的的UIScrollView

关于uiscrollview的其他信息: 1.我的uiscrollview包含一个简单的uilabel和一些uiimageview(只是一小部分作为uiscrollview的子视图)。 2.启用分页 3.水平滚动(如果有的话)

所以,有谁可以帮助我如何完成这个方法?只是一个简单的线索将非常感激,因为我仍然是一个初学者,但我想从这里的所有大师学习。

非常感谢你的帮助,祝你有个美好的一天。

2 个答案:

答案 0 :(得分:1)

我认为你可以试试这段代码

步骤1:将UIScrollViewDelegate添加到您的UIViewController

步骤2:在UIViewController(XIB或StoryBoard)上附加UIScrollView委托

步骤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:委托它更明智的必须测试

答案 1 :(得分:1)

还有另一种方法(整洁的IMO):

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

修改

对于多个图像/页面之间来回切换,最好使用

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

我没有测试过上面的代码,但根据我对C和Obj C的了解,它应该可以工作。