IOS之UIKit_Day19

Day19

回顾:

1. UIView的内部布局

          VC可以对直接子视图布局,但是不能对视图的内部直接布局,所以view必须就有自身 布局的能,通过重写UIView的LayoutSubView方法实现当需要布局的时候,方法执行的顺序

a.VC的viewWillLayoutSubView

b.View的layoutSubView

d.VC的ViewDidLayoutSubView

2. Autoresizing布局

          利用等比变换的原则,保持视图与父视图的变换比率相同,使用简单,但是使用的效果有限,有时还需要结合手写代码结合实现布局。

3 AutoLayout自动布局

          理念:使用“约束”描述位置,具体的坐标有系统根据约束计算出来

          实现:

                   方法一:在storyboard中利用配置项

                   方法二:使用代码的方式创建约束

 

 

今天:

1.Auto Layout代码创建约束

          step1:创建约束对象

                   NSLayoutConstraint(API )

          step2:: 将约束添加到父视图中

          方法一:使用万能公式:

+ (id)constraintWithItem:(id)view1

                                                          attribute:(NSLayoutAttribute)attr1

                                                          relatedBy:(NSLayoutRelation)relation

                                    toItem:(id)view2

                                           attribute:(NSLayoutAttribute)attr2

                                    multiplier:(CGFloat)multiplier

                                                constant:(CGFloat)c

                   万能公式:"view1.attr1 <relation> view2.attr2 * multiplier + constant".

                                      如button.left=self.view.left*0+20;

                                       button.right=self.view.width*1+(-20);       

          使用注意事项:translateAutoresizingToConstraints这个属性默认值是YES,这个属性代表将视图默认自带的Autoresizing特性是是否自动转换为对应的约束,既然使用代码来创建约束,那么就不要让系统自带的转换过来的约束影响添加的自定义约束,所以该属性要设置为NO 为了保证效果,可以将视图以及视图的父视图的该属性设置为NO即可。

          创建约束对象以后  一定要加到父视图当中

          方法二:一次性创建多个约束,使用VFL(Visual Format Language

          + (NSArray *)constraintsWithVisualFormat:(NSString *)format?            options:(NSLayoutFormatOptions)opts?            metrics:(NSDictionary *)metrics?                           views:(NSDictionary *)views

          metrics参数

                    用于指定VFL字符串中可以替换的值,是一个字典类型

                    如:NSDictionary *metrics = @{@"left":@20,@"space":@10,@"right":@20};

          NSDictionaryOfVariableBinding()函数

                    NSDictionary *dictionary = NSDictionaryOfVariableBindings(b1,b2,b3);

                    生成的字典如下:

                    @{@"b1":b1,@"b2":b2,@"b3":b3}

 

                   特点:功能强大

  1.4 如何写VFL字符串

          |  代表倒父视图边界的距离

          V: | 垂直方向的高度距离上边界

          []:代表子视图(控件)

     ():代表一个条件(==  >= <=)==时可以省

          —代表的是间距  默认值是8

          —XXX—代表间距是多少

如:    |-20-[button1]-10-[button2(button1)-10-[button3(button1)]-20-|

          V:|-20-[button1]

 

2. 动画(Animation) 

          2.1 是什么?

          “帧动画”:一帧是一张静态你的图片,一般情况下,一秒达到25帧的时候,人眼就分不清楚图片的切换过程了,就产生了连续的效果。

          2.2 IOS中的动画

                   UIImage类:自带一些方法,可以做简单的动画

                   NSTimer类:间隔指定的时间,产生切换的效果

                   UIView类:本身提供的功能

                            底层的core Animation提供了支持动画的底层属性

                   在IOS7中增加了一些动画功能

                   UIKit Dynamic 动力

                   Motion Effects 特效

                   Sprite Kit(corde 2D引擎)

 

3. UIImage类动画:

          //durantion 播放一组图片用的时间

UIImage *image = [UIImage animatedImageNamed:@"ship-anim" duration:1*5/30];

    self.imageView.image = image;

 

4. NSTimer

方法一:定时器创建后就会自动启动

               self.timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doSomething:) userInfo:nil repeats:YES];

方法二:定时器创建之后,就需要代码启动

               self.timer=[NSTimer timerWithTimeInterval:1 target:self    selector:@selector(doSomething:) userInfo:nil repeats:YES];

    //启动代码

             [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSDefaultRunLoopMode];

          关闭定时器: [self.timer invalidate];

 

 匀速运动

          当前值=开始值+当前帧数*(结束值-开始值)/(帧率*动画时长)

          这一个值可以是center  transform frame alpha

 变速运动:

          公式:当前值=上一次的值+(目标值-上一次值)*渐进因子

5. UIView 动画:真正的动画有专门的API

          5.1 是什么?

          有UIKit专门制作的动画API 这些API的底层对Core Animation的封装 既可以实现动画,不应再计算每一帧来实现动画的效果

          5.2 制作动画的步骤:

          step1:设置需要动画视图的初始值

          step2:给UIView类发消息 告诉UIView类需要什么样的动画

          step3:将动画结束的状态写入到一个Bloack

          5.3 动画的高级选项:

          先慢后快再慢

                   UIViewAnimationOptionCurveEaseInOut 

          越来越快         

           UIViewAnimationOptionCurveEaseIn 

      越来越慢            

           UIViewAnimationOptionCurveEaseOut 

     匀速           

           UIViewAnimationOptionCurveLinear

     动画重复

           UIViewAnimationOptionRepeat 

     反着执行动画,要配合Repeat选项                 

           UIViewAnimationOptionAutoreverse

 

 

 

时间: 2024-11-15 02:14:49

IOS之UIKit_Day19的相关文章

iOS -- SKSpriteNode类

SKSpriteNode类 继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKSpriteNode.h 参考指南 Sprite Kit Progamming Guide 概览 重要提示:这是一个初步的API或者开发技术

使用fruitstrap实现命令行将IPA包安装到iOS设备上

Requirements Mac OS X. Tested on Snow Leopard only. You need to have a valid iPhone development certificate installed. Xcode must be installed, along with the SDK for your iOS version. Usage fruitstrap [-d] -b <app> [device_id] Optional -d flag laun

iOS -- SKScene类

SKScene类 继承自 SKEffectNode:SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKScene.h 参考指南 Sprite Kit Progamming Guide 概览 重要提示:这是一个初步的API或者开

iOS -- SKPhysicsWorld类

SKPhysicsWorld类 继承自 NSObject 符合 NSCodingNSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKPhysicsWorld.h 参考指南 Sprite Kit Progamming Guide 概览 重要提示:这是一个初步的API或者开发技术文档.虽然已经审阅了本文档的技术准确性,但是它不是最终的版本.本机密信息仅适用于

iOS证书说明和发布

1.首先通过钥匙串访问——证书助理——从证书颁发机构请求证书——填写证书信息(邮箱,常用名称,存储到磁盘)——存储为(自定义名称.certSigningReuqest,简称CSR文件,只是为了提交到苹果开发者账号中,然后就没用了)到本地 2.苹果开发者账号中,创建证书(Development和Production)——上传CSR文件——下载证书运行 ( xxx.cer文件) 注意:只有在当前电脑中生成本地生成证书,上传到苹果开发账号,然后下载cer文件运行后,钥匙串中才有证书以及对应的秘钥 如果

iOS开发——项目实战总结&amp;UITableView性能优化与卡顿问题

UITableView性能优化与卡顿问题 1.最常用的就是cell的重用, 注册重用标识符 如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell 如果有很多数据的时候,就会堆积很多cell.如果重用cell,为cell创建一个ID 每当需要显示cell 的时候,都会先去缓冲池中寻找可循环利用的cell,如果没有再重新创建cell 2.避免cell的重新布局 cell的布局填充等操作 比较耗时,一般创建时就布局好 如可以将cell单独放到一个自定义类,初始化时就布局好

解决ios下的微信打开的页面背景音乐无法自动播放

后面的项目发现,还有两个坑,需要注意下: ·本文的解决方案的核心是利用了 微信/易信 在ready的时候会有个 WeixinJSBridgeReady/YixinJSBridgeReady事件,通过监听这个事件来触发的.那有个坑就是 如果微信已经ready了,但还没执行到你监听这个ready事件的代码,那么你的监听是没用的,所以最理想的情况是,监听的js放在head前面(放在css外链之前),确保最新执行,切记!切记!. ·另一个坑就是,本文的解决方案只适合一开始就播放的背景音乐.如果你是做那种

iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iOS启动原理图.png 具体执行流程 程序入口进入main函数,设置AppDelegate称为函数的代理 程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:] 创建window窗口 程序被激活[

iOS库--.a与.framework

一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存. 三.iOS里静态库形式? .a和.framework 四.iOS里动态库形式? .dylib和.framework 五.framework为什么既是静态库又是动态库? 系统的.framework是动态库,我们自己建立的.fram