UIImageView 与 CABasicAnimation 实现多层视图,带动画效果objec iOS

- (void)viewDidLoad
{
    [super viewDidLoad];
    int i;
    int n = 0;
    
    UIScrollView *newscrollview = [[UIScrollView alloc]init];
    newscrollview.frame = CGRectMake(0, 0, 320, 400);
    [self.view addSubview:newscrollview];
    
    
    newscrollview.backgroundColor = [UIColor brownColor];
        //button.backgroundColor = [UIColor redColor];
    //button.tag = 0;
    
    //关联事件。。butttest
    
    for(i = 0;     i<20; i++)
    {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [newscrollview addSubview:button];
        button.frame = CGRectMake(0, 1+n, 280, 110);
        button.backgroundColor = [UIColor redColor];
        //与事件关联  调用buttest方法
        [button addTarget:self action:@selector(butttest:) forControlEvents:UIControlEventTouchUpInside];
        
        button.tag = i;
        //在视图里加载imageview视图
        UIImageView *uiimageview = [[UIImageView alloc]init];
        uiimageview.frame = CGRectMake(1, 1+n, 90, 110);
        
        
        UIImageView *uiimageview1 = [[UIImageView alloc]init];
        UIImageView *uiimageview2 = [[UIImageView alloc]init];
        uiimageview1.frame = CGRectMake(92, 1+n, 90, 110);
        uiimageview2.frame = CGRectMake(185, 1+n, 90, 110);
        [newscrollview addSubview:uiimageview1];
        [newscrollview addSubview:uiimageview2];
        uiimageview1.image = [UIImage imageNamed:@"three.png"];
        uiimageview2.image = [UIImage imageNamed:@"four.png"];
        [newscrollview addSubview:uiimageview];
        //uiimageview.backgroundColor = [UIColor yellowColor];
        uiimageview.image = [UIImage imageNamed:@"two.png"];
       
        n = n + 113;

    }
    [newscrollview setContentSize:CGSizeMake(320, 2000)];
    newscrollview.showsVerticalScrollIndicator = NO; 
    // Do any additional setup after loading the view from its nib.

}


-(IBAction)butttest:(id)sender
{   
    NSLog(@"next add a big button ...\n");

    static int n=0 ;
    if(maximgbutton == nil)
    {
        maximgbutton = [UIButton buttonWithType:UIButtonTypeCustom];
        maximgbutton.frame = CGRectMake(0, 0, 320, 400);
        //maximgbutton.backgroundColor = [UIColor redColor];
        [self.view addSubview:maximgbutton];
        
    }
    
    if( 2== ((UIButton*)sender).tag )
    {
        [maximgbutton addTarget:self action:@selector(removebutton:) forControlEvents:UIControlEventTouchUpInside];
        NSLog(@"successful");
        if(imageviewts ==nil)
        {
            n++;
            
            
            CABasicAnimation *theAnimation;
            theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];

            theAnimation.fromValue = [NSNumber numberWithFloat:0.09];
            //移动的幅度
            theAnimation.toValue = [NSNumber numberWithFloat:320];
            //x,y轴缩小到0.1,Z 轴不变
            //theAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(320, 400, 1.0)];
            //持续时间
            theAnimation.duration = 2;
            //重复次数
            theAnimation.repeatCount = 1;
            theAnimation.removedOnCompletion = NO;
            
            theAnimation.autoreverses = YES;
            
            imageviewts = [[UIImageView alloc]init];
            imageviewts = [imageviewts autorelease];
            imageviewts.frame = CGRectMake(0, 0, 320, 400);
            imageviewts.image = [UIImage imageNamed:@"two.png"];
            [self.view addSubview:imageviewts];
            
            
             [imageviewts.layer addAnimation:theAnimation forKey:nil];
            NSLog(@"nnnnnn%i",n);
            
            
            
        }
        else 
        {
            imageviewts.frame = CGRectMake(0, 0, 320, 400);
            imageviewts.image = [UIImage imageNamed:@"two.png"];
            [self.view addSubview:imageviewts];

        }     
    }
}




-(IBAction)removebutton:(id)sender
{
    NSLog(@"remove....button\n");
    static int Calculator=0;
    Calculator ++;
    if(Calculator%2 !=0)
    {
        [imageviewts removeFromSuperview];
        [maximgbutton removeFromSuperview];
        maximgbutton =nil;   
        imageviewts = nil ;
    }
    NSLog(@"Calculator%i",Calculator);
    
}


-(IBAction)removebutton:(id)sender
{
    NSLog(@"remove....button\n");
    static int Calculator=0;
    Calculator ++;
    if(Calculator%2 !=0)
    { 
        CABasicAnimation *theAnimation;
        theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
        
        theAnimation.fromValue = [NSNumber numberWithFloat:0];
        //移动的幅度
        theAnimation.toValue = [NSNumber numberWithFloat:0];
        //x,y轴缩小到0.1,Z 轴不变
        //theAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(320, 400, 1.0)];
        //持续时间
        theAnimation.duration = 2;
        //重复次数
        theAnimation.repeatCount = 1;
        //theAnimation.delegate = self;

        //把imageviews这个视图加上theAnimation这个动画效果    
        [imageviewts.layer addAnimation:theAnimation forKey:nil];
        //开始加载动画效果
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:1];
        [UIView setAnimationDelegate:self];
        //view 大小 位置
        imageviewts.frame = CGRectMake(-320, 0, 320, 400); 
        //当动画停止的时候,调用hideAnimationStopped事件
        [UIView setAnimationDidStopSelector:@selector(hideAnimationStopped)];
        [UIView commitAnimations];

    }
    NSLog(@"Calculator%i",Calculator);
    
}

-(void)hideAnimationStopped
{
    NSLog(@"imageViewStop");
    [imageviewts removeFromSuperview];
    [maximgbutton removeFromSuperview];
     maximgbutton =nil;   
    imageviewts = nil ;

}
 
原文地址:https://www.cnblogs.com/qingjoin/p/UIImageView_CABasicAnimation.html