1

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

uiviewcontroller ---> uiimageview ---> uiscrollview

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

那么,这里有人可以帮我完成这个方法吗?一个简单的线索将不胜感激,因为我仍然是初学者,但我想向这里的所有大师学习。

非常感谢您的所有帮助,并祝您有美好的一天。

4

2 回答 2

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

于 2013-09-06T19:50:35.933 回答
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 的了解,它应该可以工作。

于 2013-09-06T19:54:24.090 回答