iOS中的UIView动画

本文详细介绍了UIKit中的动画实现方式,包括UIView动画的配置方法、代理机制及block动画的使用,并通过实例对比了图层动画与UIView动画的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变

时,UIView将为这些改变提供动画支持 

2.执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码放在[UIView beginAnimations:nil context:nil][UIView commitAnimations]之间:

[UIView beginAnimations:nil context:nil];

// ...(需要执行动画的代码)

[UIView commitAnimations];


3.UIView动画常见方法解析:

+ (void)setAnimationDelegate:(id)delegate

设置动画代理对象,当动画开始或者结束时会发消息给代理对象

+ (void)setAnimationWillStartSelector:(SEL)selector

当动画即将开始时,执行delegate对象的selector,并且把beginAnimations:context:中传入的参数传进selector

+ (void)setAnimationDidStopSelector:(SEL)selector

当动画结束时,执行delegate对象的selector,并且把beginAnimations:context:中传入的参数传进selector 

+ (void)setAnimationDuration:(NSTimeInterval)duration动画的持续时间,秒为单位
+ (void)setAnimationDelay:(NSTimeInterval)delay动画延迟delay秒后再开始

+ (void)setAnimationStartDate:(NSDate *)startDate

动画的开始时间,默认为now

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve

动画的节奏控制

+ (void)setAnimationRepeatCount:(float)repeatCount

动画的重复次数

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses

如果设置为YES,代表动画每次重复执行的效果会跟上一次相反 

+(void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView*)view cache:(BOOL)cache

设置视图view的过渡效果, transition指定过渡类型, cache设置YES代表使用视图缓存,性能较好 


UIView的block动画:

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOLfinished))completion

参数解析:
duration:动画的持续时间
delay:动画延迟delay秒后开始
options:动画的节奏控制
animations:将改变视图属性的代码放在这个block中

completion:动画结束后,会自动调⽤用这个block 

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOLfinished))completion

参数解析:
duration:动画的持续时间
view:需要进⾏行转场动画的视图
options:转场动画的类型
animations:将改变视图属性的代码放在这个block中

completion:动画结束后,会自动调用这个block 

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)durationoptions:(UIViewAnimationOptions)options completion:(void(^)(BOOL finished))completion

方法调用完毕后,相当于执行了下面两句代码:
// 添加toView到父视图
[fromView.superview addSubview:toView];

// 把fromView从父视图中移除[fromView.superview removeFromSuperview];

参数解析:

duration:动画的持续时间
options:转场动画的类型
animations:将改变视图属性的代码放在这个block中

completion:动画结束后,会自动调用这个block 


接下来是一个Demo,演示了图层动画和UIView动画的不同之处,以及如何使用UIView动画做转场效果:
效果图:


核心代码:
//
//  JLViewController.m
//  UIView封装的动画
//
//  Created by Mac on 15-5-16.
//  Copyright (c) 2015年 vxinyou. All rights reserved.
//

#import "JLViewController.h"

@interface JLViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

- (IBAction)testLayerAnim;
- (IBAction)testUIViewAnim;
- (IBAction)next;

@property (nonatomic, assign)int index;
@end

@implementation JLViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    
}

/**
 *  使用UIView做转场动画
 */
- (IBAction)next {
    
    self.index++;
    if (self.index == 3) {
        self.index = 0;
    }
    
    NSString *filename = [NSString stringWithFormat:@"%d.jpg", self.index + 1];
    self.imageView.image = [UIImage imageNamed:filename];
    
    [UIView transitionWithView:self.imageView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromTop animations:nil completion:nil];
}

/***********************************测试UIView动画begin********************************************/

///////////////////////////////////////////////////////////////////////////////////////
///   由该测试可知:
///   我们修改了imageView的center属性的值,从打印结果可知,UIView动画会真正改变center属性的值。
///////////////////////////////////////////////////////////////////////////////////////

- (IBAction)testUIViewAnim {
    /*
    [UIView beginAnimations:nil context:nil];
    
    [UIView setAnimationDuration:2.0];
    
    [UIView setAnimationDelegate:self];
    
    self.imageView.center = CGPointMake(100, 100);
    
    [UIView commitAnimations];
    */
    
    // 以上代码可以简写为下面这种block的形式
    [UIView animateWithDuration:2.0 animations:^{
        
        self.imageView.center = CGPointMake(100, 100);
        
    } completion:^(BOOL finished) {
        
        NSLog(@"%@", NSStringFromCGPoint(self.imageView.center));
    }];
    
    
}
/***********************************测试UIView动画begin********************************************/


/***********************************测试图层动画begin********************************************/

 ///////////////////////////////////////////////////////////////////////////////////////
 ///   由该测试可知,图层动画都是假象。
 ///   我们修改了layer的position属性的值,但从代理方法的打印结果可知
 ///   即使加上了
 ///   anim.removedOnCompletion = NO;
 ///   anim.fillMode = kCAFillModeForwards;
 ///   layer的position属性依然没有改变。
 ///////////////////////////////////////////////////////////////////////////////////////

- (IBAction)testLayerAnim {
    
    CABasicAnimation *anim = [[CABasicAnimation alloc] init];
    
    anim.keyPath = @"position";
    anim.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
    anim.duration = 2.0;
    
    // 下面两句代码的作用:保持动画执行完毕后的状态(如果不这样设置,动画执行完毕后会回到原状态)
//    anim.removedOnCompletion = NO;
//    anim.fillMode = kCAFillModeForwards;
    
    // 设置代理
    anim.delegate = self;
    
    [self.imageView.layer addAnimation:anim forKey:nil];
}
/***********************************测试图层动画end********************************************/


/**
 *  代理方法。动画结束时会调用
 */
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{

    NSLog(@"%@", NSStringFromCGPoint(self.imageView.layer.position));
}

@end


资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值