UIView头文件学习

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:方法的处理流程如下:

  1. 首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内;
  2. 若返回NO,则hitTest:withEvent:返回nil;
  3. 若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从top到bottom,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;
  4. 若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束;
  5. 如所有子视图都返回非,则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框架,自觉容易上手、结构清晰

   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值