iphone褪色的图像

时间:2011-04-11 08:57:48

标签: objective-c xcode

我想要的是在图像视图中显示图像并在5秒后淡化图像并显示下一个图像。图像存储在数组对象中...我能够在5之后成功转换图像我想要的是在5秒后淡出第一个图像并显示下一个图像在无限循环中发生...下面是代码,它对图像之间的正常过渡非常有用..我想要的是图像褪色...并在下面的代码中添加淡入过渡

- (void)viewDidLoad {

    imgView.animationImages=[NSArray arrayWithObjects:  
                             [UIImage imageNamed:@"lori.png"],
                             [UIImage imageNamed:@"miranda.png"],
                             [UIImage imageNamed:@"taylor.png"],
                             [UIImage imageNamed:@"ingrid.png"],
                             [UIImage imageNamed:@"kasey.png"], 
                             [UIImage imageNamed:@"wreckers.png"], nil];


    imgView.animationDuration=20.0;
    imgView.animationRepeatCount=0;
    [imgView startAnimating];
    [self.view addSubview:imgView];
    [imgView release];



    [super viewDidLoad];
}

3 个答案:

答案 0 :(得分:5)

您可以使用重复的NSTimer来调用一种特殊的方法,该方法可以连续地将图像视图alpha属性设置为0.0到1.0。以下是我编写的一些代码:

- (void)viewDidLoad {
    imgView.animationImages=[NSArray arrayWithObjects:  
                             [UIImage imageNamed:@"lori.png"],
                             [UIImage imageNamed:@"miranda.png"],
                             [UIImage imageNamed:@"taylor.png"],
                             [UIImage imageNamed:@"ingrid.png"],
                             [UIImage imageNamed:@"kasey.png"], 
                             [UIImage imageNamed:@"wreckers.png"], nil];



    imgView.animationDuration=20.0;
    imgView.animationRepeatCount=0;
    [imgView startAnimating];
    [self.view addSubview:imgView];
    [imgView release];
    //The timers time interval is the imageViews animation duration devided by the number of images in the animationImages array. 20/5 = 4 
    NSTimer *timer = [NSTimer timerWithTimeInterval:4.0 
                                              target:self 
                                            selector:@selector(onTimer) 
                                            userInfo:nil 
                                             repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    [timer fire];

    [super viewDidLoad];
}

//It is important that the animation durations within these animation blocks add up to 4 
//(the time interval of the timer). If you change the time interval then the time intervals 
//in these blocks must also be changed to refelect the amount of time an image is displayed. 
//Failing to do this will mean your fading animation will go out of phase with the switching of images.   

-(void)onTimer{
        [UIView animateWithDuration:3.0 animations:^{
            imgView.alpha = 0.0; 
        }];
        [UIView animateWithDuration:1.0 animations:^{
            imgView.alpha = 1.0; 
        }];
    }

如果希望淡入淡出持续时间持续5秒而不是4秒,则需要将图像视图animationDuration属性增加到25,然后增加两个块中的淡入淡出动画持续时间,使得淡入淡出时间= 5。

答案 1 :(得分:3)

@ user652878这回答了你关于从一张图片到另一张图片无法消失的问题:

在视图控制器标题中创建以下属性:

UIImageView *imageViewBottom, *imageViewTop;
    NSArray *imageArray; 

然后将此代码添加到您的implimentaion文件中:

int topIndex = 0, prevTopIndex = 1; 
- (void)viewDidLoad {

    imageViewBottom = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,480)];
    [self.view addSubview:imageViewBottom]; 

    imageViewTop = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,480)];
    [self.view addSubview:imageViewTop];

    imageArray = [NSArray arrayWithObjects:  
                  [UIImage imageNamed:@"lori.png"],
                  [UIImage imageNamed:@"miranda.png"],
                  [UIImage imageNamed:@"taylor.png"],
                  [UIImage imageNamed:@"ingrid.png"],
                  [UIImage imageNamed:@"kasey.png"], 
                  [UIImage imageNamed:@"wreckers.png"], nil];


    NSTimer *timer = [NSTimer timerWithTimeInterval:5.0 
                                              target:self 
                                            selector:@selector(onTimer) 
                                            userInfo:nil 
                                             repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    [timer fire];

    [super viewDidLoad];
}

-(void)onTimer{
    if(topIndex %2 == 0){
        [UIView animateWithDuration:5.0 animations:^
        {
            imageViewTop.alpha = 0.0;
        }]; 
        imageViewTop.image = [imageArray objectAtIndex:prevTopIndex];
        imageViewBottom.image = [imageArray objectAtIndex:topIndex];
    }else{
        [UIView animateWithDuration:5.0 animations:^
         {
             imageViewTop.alpha = 1.0;
         }];    
        imageViewTop.image = [imageArray objectAtIndex:topIndex];
        imageViewBottom.image = [imageArray objectAtIndex:prevTopIndex];
    }
    prevTopIndex = topIndex; 
    if(topIndex == [imageArray count]-1){
        topIndex = 0; 
    }else{
        topIndex++; 
    }
}

答案 2 :(得分:3)

当我想将一组消息动画为用户的图像时,这对我有用。无论你有多少张图片,这些代码都会通过它们旋转。

[self.messageBottom = [[UIImageView alloc] initWithFrame:CGRectMake(289, 262, 171, 38)];
[self addSubview:messageBottom];
[messageBottom setAlpha:0.0];
[messageBottom release];

self.messageTop = [[UIImageView alloc] initWithFrame:CGRectMake(289, 262, 171, 38)];
[self addSubview:messageTop];
[messageTop setAlpha:1.0];
[messageTop release];


self.messageImgsArray =[NSArray arrayWithObjects:  
                        [UIImage imageNamed:@"image1.png"],
                        [UIImage imageNamed:@"image2.png"],
                        [UIImage imageNamed:@"image3.png"],
                        [UIImage imageNamed:@"image4.png"],
                        [UIImage imageNamed:@"image5.png"],nil];


topIndex = 0, bottomIndex = 1;     
[messageTop setImage:[messageImgsArray objectAtIndex:topIndex]];

//The timers time interval is the imageViews animation duration devided by the number of images in the animationImages array. 20/5 = 4 
NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 
                                         target:self 
                                       selector:@selector(onTimer) 
                                       userInfo:nil 
                                        repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

}


-(void)onTimer{

    [UIView animateWithDuration:1 animations:^{

        //set the image of the image that is not currently visible

        if (messageTop.alpha == 0) {
            [messageTop setImage:[messageImgsArray objectAtIndex:topIndex]];
        }
        if (messageBottom.alpha == 0) {
            [messageBottom setImage:[messageImgsArray objectAtIndex:bottomIndex]];
        }

        //make sure the images rotate
        [messageTop setAlpha:messageTop.alpha == 0 ? 1 : 0];
        [messageBottom setAlpha:messageBottom.alpha == 0 ? 1 : 0];

        //make sure the images play in a loop

        topIndex = topIndex < [messageImgsArray count]-1 ? bottomIndex+1 : 0;
        bottomIndex = bottomIndex < [messageImgsArray count]-1 ? bottomIndex+1 : 0;

    }];
}