IOS之UIKit_Day18

Day18

回顾:

 1. 坐标系:

          frame   bounds center  transform

 2. 触点(UITouch

          touchesBegan:withEvent

          touchesMoved:withEvent

          touchesEnded:withEvent

 3. 布局(Layout

          影响屏幕大小该变的因素

          a.横竖屏的切换

          b.设备的不同

          c.状态栏(通话 录音 热点)

          d.各种bar(NavigationBar toolBar  TabBar)

          e.键盘的中英文切换

          所以在需要屏幕大小发生该变的时候,重新布局各个子视图,对应的方法就是重写控制器的ViewDidLayoutSUbView 方法,但是该方法只是对控制器携带的视图内部的各个子视图的一个布局控制,无法对子视图内部的控件实现控制。

 4. 关掉AutoLayout以后,drawRect方法中针对视图绘制的图形在平屏幕旋转时或被拉伸,解决办法,需要设置视图的“contentMode”设置“redraw”即可。

 

今天:

1. UIView对内部子视图的布局(典型应用:TableViewCell对内部视图的布局)

          1.1 如何实现:

                   step1:自定义视图 继承自UIView

                   step2:重写自定义视图的方法

                            a.viewWillLayoutSubViews

                            b.layoutSubViews

                            c.viewDidLayoutSubView

                   方法的执行顺序:a. b.  c.

                   一般重写layoutSubView方法即可

 2.布局对状态栏和各种Bar的处理

          常用属性:

          topLayoutGuide.length//屏幕上放当前被占据的区域的长度

          bottomLayoutGuide.length  //屏幕下方当前被占据的长度

 3.  Autoresizing布局

          3.1 是什么?

          是旧版本(IOS5之前)的自动布局技术,操作简单 ,API简单 弄能也简单,有局限性,所以很久之前叫做struts/spring(架构、弹簧)技术

          3.2 核心理念

          当屏幕大小发生变化时,根据变化的比例,对子视图进行同比例的变化

          3.3 通过设置检查器的属性实现

          step1:关闭AutoLayout

          step2:选中需要布局的子视图

          step3:打开检查器5

          step4:点亮需要的红线

          外框(4个)红线负责视图到父视图的边缘

          内框(2个)红线负责视图的内部是否可以实现拉伸

          3.3 用代码实现Autoresizing

          Autorestory和代码布局可以同时使用,用代码实现Autoresizing的不足

          button.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizin  gFlexibleBottomMargin

          代码设置时,规则描述与检查器中描述相反,只需要设置可变的边距

4 Autolayout自动布局

          4.1 是什么?

          是从IOS6之后的一个新的布局技术,功能强大操作复杂,从Xcodes5开始,慢慢好用了,在Xcode6中功能更强大了。

                   核心理念:使用约束(constraint)来描述控件在视图中的位置,当屏幕大小发生变化时,系统会根据约束条件自动计算出frame的值,然后将该值赋给控件,实现控件的排布。

          4.2 使用故事板实现对代码的布局

          4.3 操作的重点:

                   a.选中控件,分析6点,上下左右以及控件的宽高需要那些约束条件才能确定

                   b.约束的添加可以通过屏幕下方的选项,或者是,选中控件以后,按住control,连线到屏幕边缘或其他试图 

                   c.可以添加的约束条件有:对其方法(与中心点对其或与其他控件对其)、与边缘或其他视图的间距(前间距和尾间距)、视图的宽高是给定值还是以其他视图做参照标准。

                   d.添加约束后,正确的结果出现时,屏幕中有蓝线,存在红色虚线框架时,代表视图占据的区域,有橘色线条时,代表当前摆放的位置与定义的位置有距离,可以通过底部的第三个选项菜单选择更新某个视图的frame或者更新所有的frame

                   e.选中一个视图,查看第五个检查器可以看到该视图已经加了的约束,可以选中约束修改约束的内容

                   f.选中一个视图,通过查看场景的文档结构构图,观察该场景下的约束是否有错误或者警告,如果有,可以点击该场景的右上角的红色点,进入说明界面,红色的提示为异常,必须修改为正确,橘色的系统提示,一般是实际位置与约束位移有偏差,只要更新frame,就可以让橘色的警号消失

时间: 2024-12-21 00:40:16

IOS之UIKit_Day18的相关文章

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