IOS之UIKit_Day04

day14

分享两个网站 Code4app.com论坛  和Stackverflow.com编码论坛(需要FQ)

回顾:

       UICollectionViewController

       两个自定义:

              1.单元格的自定义-----继承自UICollectionViewCell

              2.布局的自定义-------继承自UICollectionViewLayout或者UICollectionViewFlowLayout

 

MVC

       Model:数据模型 存储数据  网络数据的获取  数据库操作   文件的读取

       Controller:控制器

       View:视图层

              1.绘图    2.贴图  3.手势 4.变形    5.布局    6.动画    7.动力    8.特效

今天:绘图

       1.1 基本概念:

              屏幕:有很多的晶体做成的,分辨率:1920*1080 一行有1920个晶体 一共有1080行,每一个晶体发三种颜色的光(red green blue

              图片:

                     点阵图:一堆点,每一个点是一个颜色,图片的分辨率就是存储图片点的个数。图片中的每个点都是4个整数来存储的,这四个整数分别对应该点的red(0-255)green(0-255)blue(0-255) alpha透明度。一个点就需要4个字节来存储,依据这个规律就可以计算图片的大小了。但是为了压缩图片的大小,将一个点周围的四个点计算一个平均值,用这个点来代替四个点

                     矢量图:存储的是生成图形所经过计算的数学公式

2.OC对象与图像的转换

       内存中的OC对象,会基于系统提供的默认的规则,绘制成平面图形后显示到屏幕上

       绘制的过程基本是底层的CoreGraphics这一组C语言的API实现的

       系统会为编程人员提供一个可以编程的接口,在指定的位置添加绘制代码后,就可以让系统在原有绘制的基础上增加自定义的绘制内容。

 

3.绘图的实现:

步骤:

              1.重写UIView的RrawRect方法,该方法有系统自动调用,不能自己动手调用,因为DrawRect方法只是系统统一整套绘制流程中的一个小环节。

              2.获取绘制的上下文对象

                   CGContextRefcontext=UIGraphicsGetCurrentContext();

             3.设置上下文对象的绘制起点

                   CGContextMoveToPoint(context,40, 40);

              4.添加绘制路径

                   CGContextMoveToPoint(context,40, 40);

              CGContextAddLineToPoint(context, 40, 140);

              CGContextAddLineToPoint(context, 140, 40);

              CGContextAddLineToPoint(context, 40, 40);

                 5.设置描述或者填充的颜色

                   //设置描边的颜色

             CGContextSetStrokeColorWithColor(context,[[UIColor redColor]CGColor]);

             CGContextSetFillColorWithColor(context,[[UIColor greenColor]CGColor]);

               6.绘制路径

                   //填充色

             //CGContextFillPath(context);

            //按照路径描边

             //CGContextStrokePath(context);

             //既有描边又有填充色

             CGContextDrawPath(context, kCGPathFillStroke);

4.UIBezierPath贝塞尔曲线

               4.1是OC语言对C语言的绘制的的一部分API的封装结果

               4.2作用:更加方便的绘制直线曲线矩形圆弧椭圆等

                     a.绘制三角形

                            在drawRect方法中创建BezierPath的实例

                     //创建BezierPath

               UIBezierPath*path=[UIBezierPath bezierPath]

//移动到起始位置

    [pathmoveToPoint:CGPointMake(50, 50)];

    //绘制曲线

    [pathaddLineToPoint:CGPointMake(50, 150)];

    [pathaddLineToPoint:CGPointMake(200, 50)];

    [pathaddLineToPoint:CGPointMake(50, 50)];

    //设置颜色

    [[UIColorredColor]setStroke];

    [[UIColorgreenColor]setFill];

    //设置path的常用属性

   path.lineWidth=10;

    //设置线头的样式

    path.lineCapStyle=kCGLineCapSquare;

    //设置交叉点的样式

   path.lineJoinStyle=kCGLineJoinMiter;

    //绘制

    [path fill];

    [pathstroke];

 

               b、绘制圆弧

                UIBezierPath *path2=[UIBezierPath bezierPath];

     [path2addArcWithCenter:CGPointMake(80, 200) radius:60 startAngle:M_PI_2 endAngle:0clockwise:YES];

    [path2stroke];

 

               c、定制圆形的下载进度提示条

                     新建有一个View继承自UIView

                     在.h文件中公开两个属性.progressColor   .progressValue

                     在-(void)drawRect:(CGRect)rect{}方法中绘制圆弧

                     可以与UISlider结合使用 slider的改变值用于显示下载的进度范围

               d、绘制曲线

                     绘制曲线可以调用path addCurveToPoint:<#(CGPoint)#>controlPoint1:<#(CGPoint)#> controlPoint2:<#(CGPoint)#>方法 第一个参数是绘制的终点坐标  第二个参数是控制点1即线条扭曲的方向  第二个控制点的参数同理

              

                 e、绘制其他图形

                    绘制圆角矩形可以通过  UIBezierPath*path=[UIBezierPath bezierPathWithRoundedRect:CGRectMake(40, 40, 200, 200)cornerRadius:10];第一个参数是设定矩形的起始点 以及宽度  和高度  第二个参数是设置 边角相切圆半径

                     绘制椭圆形可以通过 UIBezierPath *path=[UIBezierPathbezierPathWithOvalInRect:CGRectMake(40, 40, 100, 100)];参数为 x ,y坐标点  宽度 与高度   宽==则是圆形

                 f、绘制字符串

                     在- (void)drawRect:(CGRect)rect{}方法中

                            1.定义一个字符串

                            2.定义一个字典 用于存放该字符串的显示样式  NSDictionary*[email protected]{NSFontAttributeName:[UIFont systemFontOfSize:24],  NSForegroundColorAttributeName:[UIColorredColor]};

                            3.对字符串调用[str drawAtPoint:CGPointMake(40, 40)withAttributes:stringAttributes]方法设置显示的位置以及摆放的样式

                            *******对于长字符串来说

                            CGSizesize= [str2 sizeWithAttributes:stringAttributes];//sizeWith  XXX计算的是一行平铺的宽度

                            1.CGRectstrRect= [str2 boundingRectWithSize:CGSizeMake(250, 999)options:NSStringDrawingUsesLineFragmentOrigin attributes:stringAttributescontext:nil];//分段显示

                            2.[str2drawInRect:CGRectMake(40, 80,strRect.size.width, strRect.size.height)withAttributes:stringAttributes];

                            strRect.size.width计算出能装的下所有的字符串的宽度,strRect.size.height能装的下所有字符串的高度

               e、绘制图片

                     1.在方法中 CGRect imageRect=CGRectMake(50, 50, 200, 200);设置图片的位置以及大小

                     2.可以通过贝塞尔曲线来实现圆形图片UIBezierPath *path=[UIBezierPathbezierPathWithOvalInRect:imageRect];

                   3.[path addClip]调用切割方法 ,不再所画圆内的图片全部剪切掉

                   4.设置照片的路径

                   5.把图片画出来[image drawInRect:imageRect];

时间: 2024-08-01 10:43:03

IOS之UIKit_Day04的相关文章

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