IOS之UIKit_Day16

day16

回顾:

          贴图和美化

1. 程序中的图片

          根据设备的不同准备不同大小的图片1X  2X  3X 的多套图片 加到图片的资源库中,系统会自动加载。

          第一类:Applicon和LaunchScreen图片,根据系统的提示,加载到指定大小的图片

          第二类:应用程序中的图片利用9切片的技术调整大小(不写代码)

2. 针对程序中的美化

          2.1 控件的美化

          2.2 颜色风格的美化(tintColor UIAppearance

3. UINavigationBar美化

          3.1 三部分的美化

          3.2 背景色(barTintColor

          3.3 背景图(竖屏:图片的高度:64横屏:52点)

          3.4 导航的隐藏

          3.5 状态栏的风格设置和状态栏的隐藏

4. UITableViewCell

          实现步骤:

                   a.修改TableView的分割线None

                   b.修改TableView的背景色为clearColor

                   c.cell.backgroundView=[[UIImageView alloc]initVithImage:[UIIamageimageName:@"list"]];

 

今天:

1. 手势:

1.1 什么是手势

          用户在View上的一些触屏的操作,诸如 滑动 捏合

1.2 手势的分类

          1. 一次性的手势

                   触屏的动作以后,方法只会响应一次如:点击  解锁

          2. 连续性点击

                   触屏动作发生以后,方法会连连续响应多次如长按  捏合 移动 旋转

1.3 手势的本质

          本质是一个对象,用户针对视图发生了一定的动作之后,系统会检测到检测到该动作,并根据具体的动作创建不同种类的手势对象,该对象只会存储于动作有关的一些数据,如触屏动作的坐标,活动的快慢移动的距离

          如果发生的是一次性手势动作,那么就调用一次方法如果发生的是连续性手势动作,那么就多次调用响应方法。

1.4 如何使用手势

          step1:创建手势对象

          step2:设置与该手势相关的属性

          step3:将手势对象与需要检测的视图关联在一起

1.5 具体的手势类

          所有的手势的父类:UIGestureRecognizer

          六种手势:

          UITapGestureRecognizer点击一下屏幕

          UIPinchGestureRecongnizer捏合屏幕

          UISwipeGestureRecongnizer轻扫屏幕

          UIPanGestureRecongnizer移动手势

          UILongPressGestureRecongnizer长按手势

          UIRotationGestureRecongnizer旋转手势

2. 具体的使用

          2.1UITapGestureRecognizer (一次性手势)

        常用属性:

          .numberOfTapsRequired设置点击数

          .numberOfTouchesRequired设置触点数

          CGPointlocation=[gr locationInView:self.view];获取点击动作时,触点的绝对坐标

 

          2.2UISwipeGestureRecognizer(一次性手势)

          常用属性:

                   .numberOfTouchesRequired触点的个数

                   .direction轻扫的方向

          注意:direction属性为枚举值,并且是可以进行组合的枚举值,多个枚举值之间使用 “|”按位“或”进行运算。

          补充:1<<?    表达式的含义是:对于二进制的数字1进行向左移位,符号右侧是几,就向左移动几位。

如果想实现上下左右滑动  那么 就要使用两个UISwipeGestureRecongizer

 

2.3 UILongPressGestureRecognizer(连续性手势)

          常用属性:

          //设置最少按下的持续时间

   longGR.minimumPressDuration = 1;

 

2.4 UIPinchGestureRecognizer(连续性手势,捏合)

          CGFloatscale = gr.scale; //手势的变化比率,向外扩展时,为大于1的数,向内捏合时,为小与1的数

   CGFloatvelocity = gr.velocity;//手势的变化速率,向外扩展时,为正数,向内捏合时,为负数

         以上两个属性不是用来设置的,而是在手势发生时用来读取的。

          练习:       

                   界面上 有一个UITextView,看小说,增加手势识别,如果快速扩,小说出现,快速捏,小说隐藏,速度不快时,代表放大或缩小小说的文字大

                   text.View.editable=NO;隐藏交互

                   textView.hidden=NO;设置隐藏

         

          2.5UIRotationGestureRecognizer (连续性手势,旋转)

                   常用属性:

                   CGFloatrotation = gr.rotation;

                   代表手势旋转的弧度。顺时针旋转时,为正数,逆时针旋转时为负数

         

          2.6UIPanGestureRecognizer(连续性手势,拖动)

          常用属性:

          //获取移动到的位置在视图坐标系中的绝对位置

    CGPointlocation = [gr locationInView:self.view];

    //获取移动到的新位置相对于移动动作起始点的坐标的横纵向的偏移

    CGPointtranslation = [gr translationInView:self.view];

 

3.变形(Transform

3.1 什么是变形

          视图发生了位移,缩放。旋转这样的变化

3.2 如何实现变形

          可以通过修改视图对象的.transform属相完成变化的效果

          位移:translation

          缩放:scale

          旋转:rotation

3.3 transform属性

          类型:CGAffineTransForm类型的结构体

          结构体中包含了6个可变的值和3个定值组成的3*3的矩阵,修改了6个数中的某一个或者某几个就可以实现变形,实际上着6个数很难计算,借助于一些系统的API实现数值的改变

3.4 修改transform属性的API

          修改位移:CGAffineTransformMakeTranslation();

                                  CGAffineTransformTranslate();

          缩放变换:CGAffineTransformMakeScale()

                                 CGAffineTransformTranslate();

 

          旋转:                 CGAffineTransformMakeRotation()

                                      CGAffineTransformRotate()

         

重点注意:变形与自动布局是冲突的,所以在使用变形时一定要先关闭AutoLayout,不关闭的,产生的效果无法预计

 

          界面创建后,没有做任何变形之前系统会将每一个试图的当前transform记录倒一个常量中CGAffineTransformIndentity当使用MakeXX()方法进行反射变换,计算新的矩阵,都是基于这个常量进行变形计算的。当使用没用Make的那组方法时,每次计算新的矩阵都是以传入的transform的值作为基准

 

          3.5TransForm属性的初始化常量

                   CGAffineTransfomIdentity

4.手势+变形

          4.1UIPanGestureRecongnizer+实现位移:

                   a.创建UIPanGestureRecongnizer的实例

                   UIPanGestureRecognizer*PanGR=[[UIPanGestureRecognizer alloc]initWithTarget:selfaction:@selector(pan:)];

                   b.添加到视图当中

    [self.viewaddGestureRecognizer:PanGR];

          c.在pan方法中得到偏移量

          CGPointtranslation=[GR translationInView:self.View];

          d.设置imageView的移动中点

          GPointcenter = CGPointMake(self.imageView.center.x+translation.x,self.imageView.center.y+translation.y);

   self.imageView.center = center;

     e.设置该次偏移的偏移量为zero

            [GRsetTranslation:CGPointZero inView:self.View];

 

  4.2 使用pinch手势实现缩放变形

          a.创建实例

                   UIPinchGestureRecognizer*pinGR=[[UIPinchGestureRecognizer alloc]initWithTarget:selfaction:@selector(pin:)];

    [self.viewaddGestureRecognizer:pinGR];     

          b.在方法中实现   self.imageView.transform=CGAffineTransformScale(self.imageView.transform,GR.scale,GR.scale);

          设置缩放起点

          GR.scale=1;//不设置缩放量 和缩放手势不一致

         

   4.3  使用Rotation手势实现旋转变形

          a.创建Rotation实例

          b.在方法中实现

             self.imageView.transForm=CGAffineTransFprmRotate(self.imageView.transForm,GR.rotation)

              GR.rotation=0;不设置时旋转后和旋转量不一致

         

     4.4 多手势共存的问题:

                   解决步骤:

                   a.设置各个手势的代理

                   b.实现一个方法

          -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizershouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer{

    return YES;

}

 

【综合练习】

图片查看器:

1》使用代码向View中添加一个UIImageView对象,UIImageView的大小和图片大小一致,找一张大图

2》使用center属性将Imageview移到到屏幕的中央

3》使用transform属性将imageview缩放倒屏幕刚好能显示的下正常图片的内容,且保存宽高比

4》对imageView增加rotation手势,支持图片的旋转

5》对imageView增加pinch手势,支持图片的缩放

6》对mageView增加pan手势,支持图片的移动

7》对imageView增加tap手势,床架回到第3

注意:手势不要添加到self.view添加到图片上,记得打开imageView的用户交互(.userInteractionEnable=YES

 

时间: 2024-11-03 22:04:47

IOS之UIKit_Day16的相关文章

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