UIView常用属性

@interface UIView(UIViewGeometry)
@property(nonatomic,getter=isExclusiveTouch) BOOL      exclusiveTouch __TVOS_PROHIBITED;// default is NO
@property(nonatomic,readonly,strong)                 CALayer  *layer;
@end

ExclusiveTouch

A Boolean value that indicates whether the receiver handles touch events exclusively.Setting this property to YES causes the receiver to block the delivery of touch events to other views in the same window. The default value of this property is NO. – Apple

作用: 接收点击事件的排他性。设置为YES时,则当本控件接收到点击事件,则同一窗口(window)中其他控件无法接收到触摸事件。 因为本控件已经阻塞了触摸事件的传递。
应用: 避免一个触摸事件触发多个按钮相应。
Demo:

-(void)setExclusiveTouchForButtons:(UIView *)myView
{for (UIView * v in [myView subviews]) {if([v isKindOfClass:[UIButton class]])[((UIButton *)v) setExclusiveTouch:YES];else if ([v isKindOfClass:[UIView class]]){[self setExclusiveTouchForButtons:v];}}
}

或者在AppDelegate

[[UIButton appearance] setExclusiveTouch:YES];// **这个方法仅支持iOS 8.0+系统**

文/MindTheGap(简书作者)
原文链接:http://www.jianshu.com/p/8c505df3b16d

layer属性

返回主Layer实例

DrawRect

是否应该实现DrawRect

最快的绘制就是你不要做任何绘制。大多数时间,你可以不要合成你在其他视图(图层)上定制的视图(图层),这正是我们推荐的,因为 UIKit 的视图类是非常优化的 (就是让我们不要闲着没事做,自己去合并视图或图层) 。 – from ObjC中国-绘制像素到屏幕上

drawRect会被调用的情况

1) 调用sizeToFit后被调用(ps: 调用sizeToFit计算出size,然后系统自动调用drawRect方法);[提倡]
2) 通过设置contentMode属性值为UIViewContentModeRedraw,则在每次设置或更改frame的时候自动调用drawRect:。[不提倡]
3) 调用setNeedsDisplay/setNeedsDisplayInRect: 会触发drawRect: ,前提是rect不为0;[不提倡]
drawRect是在loadView,viewDidLoad两方法后调用。该方法无法手动调用,只有通过调用其他方法触发.
ps : 初始化时未设置rect,则不自动调用drawRect。

UIView动画属性

// ? frame与bounds设置动画属性时有什么区别
@property(nonatomic) CGRect frame;// 大小变化,改变位置和大小
@property(nonatomic) CGRect bounds;// 拉伸变化,改变位置和大小
@property(nonatomic) CGPoint center;// 位置修改
@property(nonatomic) CGAffineTransform transform;// 旋转
@property(nonatomic) CGFloat alpha;// 透明度修改,会创建淡入淡出的效果
@property(nonatomic, copy) UIColor *backgroundColor;// 颜色转变@property(nonatomic) CGRect contentStretch;// 拉伸 iOS6.0 deprecated
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets;

动画过程

// 1.开始动画
[UIView beginAnimations:(nullableNSString*)context:(nullablevoid*)];
// 2.动画参数设置
//动画持续时间
[UIView setAnimationDuration:(NSTimeInterval)];
//动画的代理对象
[UIView setAnimationDelegate:(nullableid)];
//设置动画将开始时代理对象执行的SEL
[UIView setAnimationWillStartSelector:(nullableSEL)];
//设置动画结束时代理对象执行的SEL
[UIView setAnimationDidStopSelector:(nullableSEL)];
//设置动画延迟执行的时间
[UIView setAnimationDelay:(NSTimeInterval)];
//设置动画的重复次数
[UIView setAnimationRepeatCount:(float)];
//设置动画的曲线
[UIView setAnimationCurve:(UIViewAnimationCurve)];
UIViewAnimationCurve的枚举值如下:
UIViewAnimationCurveEaseInOut,//慢进慢出(默认值)
UIViewAnimationCurveEaseIn,//慢进
UIViewAnimationCurveEaseOut,//慢出
UIViewAnimationCurveLinear//匀速
//设置是否从当前状态开始播放动画
[UIView setAnimationBeginsFromCurrentState:YES];
// 3.结束动画
[UIView commitAnimations];

移动demo

// from
-(void)changeFrame{
[UIView beginAnimations:@"FrameAni"context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationWillStartSelector:@selector(startAni:)];
[UIViews etAnimationDidStopSelector:@selector(stopAni:)];
[UIView setAnimationRepeatCount:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
self.cartCenter.frame=self.centerShow.frame;
[UIView commitAnimations];
}
-(void)startAni:(NSString*)aniID{
NSLog(@"%@start",aniID);
}
-(void)stopAni:(NSString*)aniID{
NSLog(@"%@stop",aniID);
}

转场动画

-(void)flipAni{
[UIView beginAnimations:@"FlipAni"context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationWillStartSelector:@selector(startAni:)];
[UIView setAnimationDidStopSelector:@selector(stopAni:)];
[UIView setAnimationRepeatCount:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFrom LeftforView:self.centerShowcache:YES];
self.centerShow.image=[UIImage imageNamed:@"service"];
[UIView commitAnimations];
}

Block动画

// 1.简单动画block
[UIViewanimateWithDuration:(NSTimeInterval)//动画持续时间
animations:^{
//执行的动画
}];// 2. 带动画完成回调
[UIViewanimateWithDuration:(NSTimeInterval)//动画持续时间
animations:^{
//执行的动画
}completion:^(BOOLfinished){
//动画执行完毕后的操作
}];// 3. 可设置动画延迟时间与过度效果
[UIViewanimateWithDuration:(NSTimeInterval)//动画持续时间
delay:(NSTimeInterval)//动画延迟执行的时间
options:(UIViewAnimationOptions)//动画的过渡效果
animations:^{
//执行的动画
}completion:^(BOOLfinished){
//动画执行完毕后的操作
}];// 4. Spring动画
[UIView animateWithDuration:(NSTimeInterval)//动画持续时间
delay:(NSTimeInterval)//动画延迟执行的时间
usingSpringWithDamping:(CGFloat)//震动效果,范围0~1,数值越小震动效果越明显
initialSpringVelocity:(CGFloat)//初始速度,数值越大初始速度越快
options:(UIViewAnimationOptions)//动画的过渡效果
animations:^{
//执行的动画
}
completion:^(BOOLfinished){
//动画执行完毕后的操作
}];// 5.关键帧动画
[UIView animateKeyframesWithDuration:(NSTimeInterval)//动画持续时间
delay:(NSTimeInterval)//动画延迟执行的时间
options:(UIViewKeyframeAnimationOptions)//动画的过渡效果
animations:^{
//执行的关键帧动画
}
completion:^(BOOLfinished){
//动画执行完毕后的操作
}];// 6. 转场动画
[UIView transitionFromView:(nonnullUIView*)
toView:(nonnullUIView*)
duration:(NSTimeInterval)
options:(UIViewAnimationOptions)
completion:^(BOOLfinished){
//动画执行完毕后的操作
}];

其中UIViewAnimationOptions的枚举值为:

UIViewAnimationOptionLayoutSubviews//进行动画时布局子控件
UIViewAnimationOptionAllowUserInteraction//进行动画时允许用户交互
UIViewAnimationOptionBeginFromCurrentState//从当前状态开始动画
UIViewAnimationOptionRepeat//无限重复执行动画
UIViewAnimationOptionAutoreverse//执行动画回路
UIViewAnimationOptionOverrideInheritedDuration//忽略嵌套动画的执行时间设置
UIViewAnimationOptionOverrideInheritedCurve//忽略嵌套动画的曲线设置
UIViewAnimationOptionAllowAnimatedContent//转场:进行动画时重绘视图
UIViewAnimationOptionShowHideTransitionViews//转场:移除(添加和移除图层的)动画效果
UIViewAnimationOptionOverrideInheritedOptions//不继承父动画设置
UIViewAnimationOptionCurveEaseInOut//时间曲线,慢进慢出(默认值)
UIViewAnimationOptionCurveEaseIn//时间曲线,慢进
UIViewAnimationOptionCurveEaseOut//时间曲线,慢出
UIViewAnimationOptionCurveLinear//时间曲线,匀速
UIViewAnimationOptionTransitionNone//转场,不使用动画
UIViewAnimationOptionTransitionFlipFromLeft//转场,从左向右旋转翻页
UIViewAnimationOptionTransitionFlipFromRight//转场,从右向左旋转翻页
UIViewAnimationOptionTransitionCurlUp//转场,下往上卷曲翻页
UIViewAnimationOptionTransitionCurlDown//转场,从上往下卷曲翻页
UIViewAnimationOptionTransitionCrossDissolve//转场,交叉消失和出现
UIViewAnimationOptionTransitionFlipFromTop//转场,从上向下旋转翻页
UIViewAnimationOptionTransitionFlipFromBottom//转场,从下向上旋转翻页

参考资料

Animations-Apple
UIView-Apple
iOS动画篇:UIView动画
iOS UIView Animation - First Animation

UIView动画初探相关推荐

  1. 【动画1】UIView动画

    讲一下动画.将分为以下5篇博客. 一)UIView动画 二)Layer动画 三)3D动画 四)转场动画 五)第三方动画框架 相关代码:https://github.com/dolacmeng/Anim ...

  2. (0034) iOS 开发之UIView动画(过渡效果)

    UIView视图的动画功能,可以使在更新或切换视图时有放缓节奏.产生流畅的动画效果,进而改善用户体验.UIView可以产生动画效果的变化包括: 位置变化:在屏幕上移动视图. 大小变化:改变视图框架(f ...

  3. GIF动画,菊花动画,UIView动画,CoreAnimation动画(CALayer动画)的用法

    1.GIF动画 1 // 创建一个显示图片的imageView // viewController创建 2 UIImageView *showGifImageView = [[UIImageView ...

  4. iOS之UIview动画

    一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画支持 执行动画所需要的工作由UIView类自动完成, ...

  5. iOS 动画总结----UIView动画

    1.概述 UIKit直接将动画集成到UIView类中,实现简单动画的创建过程.UIView类定义了几个内在支持动画的属性声明,当这些属性发生改变时,视图为其变化过程提供内建的动画支持. 执行动画所需要 ...

  6. iOS动画:UIView动画和CALayer动画(CABasicAnimation、CAKeyframeAnimation的使用)

    iOS中的动画有两种实现方式,一种是UIView来实现动画,另一种动画是通过CALayer来实现,下面介绍两种动画的简单实现: 一.UIView动画的实现 UIView使用Context来实现动画 关 ...

  7. ios uiview动画_iOS UIView动画

    ios uiview动画 In this tutorial, we'll be animating our UI Views in various ways in the iOS Applicatio ...

  8. iOS核心动画以及UIView动画的介绍

    我们看到很多App带有绚丽狂拽的特效,别出心裁的控件设计,很大程度上提高了用户体验,在增加了实用性的同时,也赋予了app无限的生命力.这些华丽的效果很多都是基于iOS的核心动画原理实现的,本文介绍一些 ...

  9. 技术文摘2 uiview动画

    写给毕业生的求职锦囊 动画的微妙之处 贝赛尔曲线 从武侠小说到程序员面试 普通题但有深度 我的网摘 漫谈程序员系列:一张图道尽程序员的出路 史上最全的程序员求职渠道总结 乐观的程序员 程序员的能力拓展 ...

最新文章

  1. 美团高德并不是解决快车问题的灵药,烧完钱之后只会产生新的滴滴
  2. 如何自定义SAP Spartacus的路由路径
  3. pythonpil模块安装_centos 安装python PIL模块
  4. SQL Server : 禁止在SQL Server中生成用户实例
  5. 关于人行acs对账不及时_记工记账新方法,不用本子不用笔,一个手机全搞定
  6. 利用dynamoRIO实现codeCoverage
  7. (30)Verilog HDL系统函数:$stop
  8. Spark DataFrame入门详解
  9. PHP Cookbook读书笔记 – 第17章图形
  10. Codeforces Round #446 (Div. 2) D. Gluttony 构造,思维
  11. linux vi中删除命令,linux vi删除命令的使用
  12. 使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master
  13. JSP的表单回显实现
  14. 阿里java面试流程_阿里巴巴JAVA开发工程师面试经验
  15. win10系统跟Linux系统哪个好,Linux比Windows10系统好吗?Linux vs Win10测试
  16. 微信企业号开发(1)--基础入门
  17. android 异源投屏,华为MATE10支持异源投屏是什么意思?
  18. 免费的安装算量软件有哪些?鹏业安装算量与品茗安装算量对比
  19. Havel–Hakimi算法学习笔记(哈维尔算法)详细【Python】
  20. 使用picgo配置图床使用

热门文章

  1. 读懂Java中的Socket编程
  2. 预约美发平台开发,美容美发店老板可以借鉴上门推拿模式
  3. Lambda And Stream
  4. 自定义view--仿照 体育app,股票,基金,电商,区块链APP 数据信息栏展示(还没写完)
  5. CSS3 制作动态相册
  6. 马甲神功之android版
  7. 2021年 软件工程 顶级会议 截稿时间
  8. 影视图片编辑工作者怎么选择显示器?
  9. 既然选择了远方便只顾风雨兼程
  10. html框架frame