iOS开发中,大部分组件的属性或者方法都很多,一下子掌握全部并不现实,并且很容易忽略某些非常有用的知识点,但对组件有个整体的了解,对开发过程是很有作用的(避免走很多弯路)。作为安卓转iOS开发的小菜鸟,还是从基础打起,慢慢进步。
头文件中的几个枚举类型:
1. UIViewAnimationCurve(动画曲线): 作为类方法 setAnimationCurve:(UIViewAnimationCurve)curve的参数,默认是UIViewAnimationCurveEaseInOut,用来设置动画行为
UIViewAnimationCurveEaseInOut, 开始慢、结束慢
UIViewAnimationCurveEaseIn, 开始慢
UIViewAnimationCurveEaseOut, 结束慢
UIViewAnimationCurveLinear 线性匀速
2. UIViewContentMode(内容模式):子类UIImageView经常用到,默认是 UIViewContentModeScaleToFill
UIViewContentModeScaleToFill, (没有按照图片本身的长宽比例拉伸以填充视图)
UIViewContentModeScaleAspectFit, (按照图片本身的长宽比例拉伸以适应视图)
UIViewContentModeScaleAspectFill, (按照图片本身的长宽比例拉伸以填充视图)
UIViewContentModeRedraw, (视图的尺寸位置发生变化时重绘)
UIViewContentModeCenter, (图片大小不变,如果图片大小超过视图,会超出边界显示(下同),显示在视图中央)
UIViewContentModeTop, (显示在视图顶部)
UIViewContentModeBottom, (显示在视图底部)
UIViewContentModeLeft, (显示在视图左边)
UIViewContentModeRight, (显示在视图右边)
UIViewContentModeTopLeft, (显示在视图左上边)
UIViewContentModeTopRight, (显示在视图右上边)
UIViewContentModeBottomLeft, (显示在视图左下边)
UIViewContentModeBottomRight, (显示在视图右下边)
3. UIViewAnimationTransition(过渡动画):常用于页面的翻转效果,类方法
setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache的参数之一
UIViewAnimationTransitionNone, 正常
UIViewAnimationTransitionFlipFromLeft, 从左向右翻
UIViewAnimationTransitionFlipFromRight, 从右向左翻
UIViewAnimationTransitionCurlUp, 从下向上卷
UIViewAnimationTransitionCurlDown, 从上向下卷
4. UIViewAutoresizing :自动调整子控件与父控件之间的位置关系(常用于屏幕适配,关于屏幕适配,简单的适配可以考虑使用UIViewAutoresizing,复杂、比较细节化的适配可以考虑使用autolayout,or两者配合)
UIViewAutoresizingNone 不自动调整。
UIViewAutoresizingFlexibleLeftMargin 自动调整与superView左边的距离,保证与superView右边的距离不变。UIViewAutoresizingFlexibleRightMargin 自动调整与superView的右边距离,保证与superView左边的距离不变。
UIViewAutoresizingFlexibleTopMargin 自动调整与superView顶部的距离,保证与superView底部的距离不变。
UIViewAutoresizingFlexibleBottomMargin 自动调整与superView底部的距离,保证与superView顶部的距离不变。
UIViewAutoresizingFlexibleWidth 自动调整自己的宽度,保证与superView左边和右边的距离不变。
UIViewAutoresizingFlexibleHeight 自动调整自己的高度,保证与superView顶部和底部的距离不变。
5. UIViewAnimationOptions(动画选项,与以上重复的不再列出)
UIViewAnimationOptionLayoutSubviews 在执行UIView动画时,自动更新Subview的Layout约束(子view随父view的运动方式运动)
UIViewAnimationOptionAllowUserInteraction 执行动画时接受用户事件(触摸等)
UIViewAnimationOptionBeginFromCurrentState 所有视图从当前状态运行
UIViewAnimationOptionRepeat 重复运行动画
UIViewAnimationOptionAutoreverse 执行动画回路(在设置UIViewAnimationOptionRepeat 的前提下)
UIViewAnimationOptionOverrideInheritedDuration 忽略外层动画嵌套的执行时间
UIViewAnimationOptionOverrideInheritedCurve 忽略外层动画嵌套的时间变化曲线
UIViewAnimationOptionAllowAnimatedContent 动画过程中重绘视图(仅适用于过渡动画)
UIViewAnimationOptionShowHideTransitionViews 视图切换时直接隐藏旧视图、显示新视图,而不是将旧视图从父视图移除(仅适用于过渡动画)
UIViewAnimationOptionOverrideInheritedOptions 不继承父动画设置或动画类型
UIViewAnimationOptionTransitionCrossDissolve 旧视图溶解消失显示下一个新视图
6. UIViewKeyframeAnimationOptions(关键帧动画,主要用于处理复杂的动画,解决动画块多层嵌套的问题)
与UIViewAnimationOptions类似的不再列出
UIViewKeyframeAnimationOptionCalculationModeLinear
UIViewKeyframeAnimationOptionCalculationModeDiscrete
UIViewKeyframeAnimationOptionCalculationModePaced
UIViewKeyframeAnimationOptionCalculationModeCubic
UIViewKeyframeAnimationOptionCalculationModeCubicPaced
(图片引自:http://www.360doc.com/content/15/0126/14/11029609_443814808.shtml)
7. UIViewTintAdjustmentMode(视图的着色调整模式,相关的属性是tintColor,其值的设置会影响到以视图为根视图的整个视图层次结构)
UIViewTintAdjustmentModeAutomatic, 与父视图的着色模式一致
UIViewTintAdjustmentModeNormal, 视图的tintColor属性返回完全未修改的视图着色颜色
UIViewTintAdjustmentModeDimmed, 视图的tintColor属性返回一个去饱和度的、变暗的视图着色颜色
8. UIUserInterfaceLayoutDirection (界面布局方向)
UIUserInterfaceLayoutDirectionLeftToRight, 从左往右
UIUserInterfaceLayoutDirectionRightToLeft, 从右往左
UICoordinateSpace协议(主要用于坐标转换,当前视图的坐标与屏幕坐标体系)可以参考:
http://chun.tips/blog/2014/10/23/xiang-jie-uicoordinatespacehe-uiscreenzai-ios-8shang-de-zuo-biao-wen-ti/
layerClass类方法,返回主layer所使用的类,UIView的子类可以通过重载这个方法,来让UIView使用不同的CALayer来显示
UIView 的绘图部分由CALayer(Core Animation Layer)来管理,访问UIView的坐标或者大小信息实际上是在访问其维护的CALayer实例的信息
关于初始化方法:initWithFrame 和 initWithCoder 的区别:
前者是在纯代码创建视图和子视图时,后者是在视图加载nib文件,从nib中加载实例时
userInteractionEnabled 表示当前视图是否接受(响应)用户事件
如果设置为NO,则当前视图忽略掉所有用户事件,并且从事件响应队列中移除,默认值是YES
特殊情况说明:
在播放动画的时候,不论userInteractionEnabled的值是YES还是NO,用户交互会被临时设置为不支持交互的状态。
如果在播放动画的时候,想让对象依然保持可交互状态,那么需要设置动画的UIViewAnimationOptions的属性值为 UIViewAnimationOptionAllowUserInteraction(上文提到过的)
multipleTouchEnabled 是否支持多点触摸
exclusiveTouch 同一界面上多个控件接受事件时的排他性(比如可以设置多个按钮的此属性为YES,可确保同时按下多个按钮时只有一个响应)
hitTest:withEvent:方法的处理流程如下:
- 首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内;
- 若返回NO,则hitTest:withEvent:返回nil;
- 若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从top到bottom,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;
- 若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束;
- 如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)
isDescendantOfView 判断当前视图是否是指定视图的子视图
clipsToBounds属性:如果子视图的范围超出了父视图的边界,那么超出的部分就会被裁剪掉
UIViewAnimation部分
beginAnimations 和 commitAnimations 之间是动画设置的相关内容(比如动画时长、延时、代理、不同动画状态的Selector等)
UIViewAnimationWithBlocks部分
以块的形式处理动画结束时执行的操作,与UIViewAnimation大体相同,官方推荐在iOS4以后使用[UIView animateWithDuration:animations:],而不是原来的[UIView beginAnimations:context:],来完成动画,虽然二者功能几乎完全相同,但使用前者在一些情况下会方便不少
两者的区别:[UIView animateWithDuration:animations:]默认会禁止触摸,手势等的响应,可以通过设置option选项来解决
UIMotionEffect和Home页背景视差效果(方便日后使用)
文章链接:http://www.cocoachina.com/ios/20150121/10967.html
最后关于UIView的自动布局部分,本人一直使用的是Masonry框架,自觉容易上手、结构清晰