自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

rv0p111

学习的脚步

  • 博客(83)
  • 收藏
  • 关注

原创 ios-对图片进行裁剪得到一个新图片和保存到相册

在ios10我们需要在info.plist文件中设置下这样的一个键值对Privacy - Photo Library Usage Description,后面的value你可以自己写你想要的提示信息//获取图片 UIImage * image=[UIImage imageNamed:@"03"]; //开启上下文 UIGraphicsBeginImageContextWit...

2017-07-31 21:20:02 1221

原创 ios-图片类型的上下文

图片类型的上下文可以帮我们获取图片,和layer类型的上下文是不一样的,图片类型的上下文渲染是渲染到一张图片上,而layer类型的上下文是直接渲染到了UIView上了。我们对于图片类型的上下文我们首先要开启,结束之后别忘记关闭。大致的步骤如下所示。 //开启图片类型的上下文 UIGraphicsBeginImageContext(CGSizeMake(300, 300)); ...

2017-07-31 18:08:48 518

原创 ios-裁剪上下文的渲染的区域

注意这里的裁剪没有把上下文给裁剪了,而只是把显示的区域进行了裁剪。我们要先把显示区域给裁剪的才能去渲染。- (void)drawRect:(CGRect)rect {//获取图片的对象 UIImage * image=[UIImage imageNamed:@"bg"]; //获取上下文 CGContextRef ctx=UIGraphicsGetCurrent...

2017-07-31 17:45:15 369

原创 ios-模拟imageView的类

.h文件#import <UIKit/UIKit.h>@interface ImageView : UIView@property (nonatomic ,strong)UIImage * image;- (instancetype)initWithImage:(UIImage *)image;@end.m文件#import "ImageView.h"@implemen...

2017-07-31 17:24:17 262

原创 ios-绘制文字和图片

这里都是在UIView 的 drawRect方法中调用的绘制文字 NSString * str=@"哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"; //从某个点开始  [str drawAtPoint:CGPointZero withAttributes:@{NSUnderlineStyleAttributeName:@(1)}]; //写在那个区域内,字多可以换行 ...

2017-07-31 16:41:18 539

原创 ios-图形上下文栈

图形上下文栈保存的仅仅是当前的绘图状态信息也就是线宽,颜色,缩放,平移啊这些信息,跟路径和输出目标都是没有关系的。图形上下文栈有两个操作一个是void  CGContextSaveGState(CGContextRef c)这个函数就是将当前绘图信息的状态保存到一个context的 graphics state栈中。关于state的值,如下所示CTM (current transformation...

2017-07-31 15:34:22 429

原创 ios-矩阵旋转缩放平移操作

矩阵的旋转、缩放、平移操作一定是在添加路径到上下文中之前进行的否则是无效的。简单来说就是如下的操作 //1、获取上下文 CGContextRef ctx=UIGraphicsGetCurrentContext(); //进行矩阵的旋转操作 //CGContextRotateCTM(ctx, M_PI_4); //缩放操作,就是x缩短为0.5,y缩短为0.5 ...

2017-07-31 14:55:04 900

原创 ios-饼图和柱状图的绘制

饼图 NSArray * array=@[@0.25,@0.35,@0.3,@0.1]; CGFloat start=0.0; CGFloat end=0.0; for(int i=0;i<array.count;i++) { //结束的位置等于起始的位置加大小 end=2*M_PI*[array[i] floatValue]+...

2017-07-31 11:06:12 651

原创 ios-渲染的方式以及填充规则

渲染的方式主要分为两种一种是描边一种是填充,其实就是一个是空心,一个是实心的区别,具体看代码这是C的方式 //1、获取当前上下文 CGContextRef ctx=UIGraphicsGetCurrentContext(); //2、拼接路径,同时把路径添加到上下文当中 //画个三角形 CGContextMoveToPoint(ctx, 50, 50);...

2017-07-31 09:12:43 1800

原创 ios-绘图样式

几种常见的绘图样式的介绍:线宽、连接处、头尾样式C的方式 //1、获取上下文 CGContextRef ctx=UIGraphicsGetCurrentContext(); //2、拼接路径,同时把路径添加到上下文当中 CGContextMoveToPoint(ctx, 50, 50); CGContextAddLineToPoint(ctx, 100, ...

2017-07-31 08:25:41 431

原创 ios-矩形-圆角矩形-椭圆-圆形的绘制

画一个矩形//创建路径 UIBezierPath * path=[UIBezierPath bezierPathWithRect:CGRectMake(20, 20, 80, 80)]; //渲染 [path stroke];//也可以直接这样  [[UIBezierPath bezierPathWithRect:CGRectMake(20, 20, 80, 80)] ...

2017-07-30 22:02:12 3117

原创 ios-drawrect方法解析

这里学习到几个知识点1、代码为什么要写在drawrect中?因为我们在这里面获取到的上下文是系统肯定已经创建好了,如果我们在别的地方获取,可能系统还没有创建好。也就是说在这个方法中我们能获取到正确的上下文。2、rect参数的含义就是当前view的bounds3、drawrect 什么时候调用这个方法其实是系统自动回调用在view第一次显示的时候就会调用在这个view就行重绘的时候也会调用4、怎么样...

2017-07-30 20:56:01 563

原创 ios-绘图的方式

以下方法都是在drawRect方法中调用的纯C的方式1//获取当前绘图上下文 CGContextRef ctx=UIGraphicsGetCurrentContext(); //拼接路径 同时把路径添加到上下文中 CGContextMoveToPoint(ctx, 50, 50);//到这里的时候相当于你笔只是停留在这个位置的上面 CGContextAddLineT...

2017-07-30 20:34:53 317

转载 ios-Quartz 2D

Quartz 2D 是一个二维的绘图引擎,同时支持ios和Mac OS X系统是跨平台的,纯C语言写的,包含在Core Graphics框架中。Quartz 可以绘制图形:线条\三角形\矩形\圆\弧等它也可以绘制文字,就比如说你微博发出去的图片会有个水印,其实就是绘制了文字。也可以绘制\生成图片读取\生成PDF截图\裁剪图片自定义UI控件Quartz 2D 的API都是纯C语言的数据类型和函数基本...

2017-07-30 17:45:01 361

原创 ios-归档解档

如果你想让保存一个自定义的对象,你就要让这个自定义的对象去遵守这个协议,而且我们要在.m文件中重写-(void)encodeWithCoder:(NSCoder *)aCoder{}方法来告诉归档需要保存哪些属性,这个NSCoder类型的对象和字典很相似。我们在自定义类的.m文件中要实现这个方法。就比如我在Person.h头文件中定义了两个属性,一个是年龄,一个是名字,我想要把这两个属性保存起来,

2017-07-30 08:04:44 684

原创 ios-偏好设置浅析

NSUserDefaults主要就是用来做偏好存储的一个类,这个和字典差不多,是用来快速存储键值对的NSUserDefaults就只有一个单例对象.下面就是获取一个单例对象的方法 NSUserDefaults * defaults=[NSUserDefaults standardUserDefaults];[defaults setObject:@"hhh" forKey:@"value"];

2017-07-29 20:39:38 473

原创 ios-应用程序沙盒

应用沙盒的文件系统目录应用沙盒其实就是应用程序所在的那个文件夹,包含了所有的资源文件和可执行文件。Documents:就是保存应用运行时生成的需要持久化的数据,什么是需要持久化的数据就是保存到硬盘里面的数据,下次我们开机还是可以看到的数据,iTunes在同步设备的时候回备份该目录,比如说游戏的存档一般都保存在该目录下。tmp:保存应用运行时所需要的临时数据,使用完毕之后再将相应

2017-07-29 18:04:13 579

原创 ios-数据的逆传

关于数据的逆传我举个例子吧,比如说你点击一个按钮push到了另一个控制器。然后你在你push到的那个控制器想pop回来,而且想传回一个数据,这样的话我们可以让代理来做,当然我们也可以让block来做。关于代理的使用步骤如下所示1、写代理2、写代理里面的方法3 、写delegate属性4、在哪执行代理方法5、在哪使用代理方法使用block的步骤1、写一个block的属性,

2017-07-29 15:53:58 262

原创 ios-Segue

ios中Segue分为自动型和手动型,自动型就是在storyboard中按住control键直接从控件拉到目标控制器,这条线就是Segue。自动型一般是在你点击了某个控件之后,不需要进行任何判断了,一定要跳转到下一个界面,最好就用自动型的Segue.手动型就是按住control键从来源控制器拖线到目标控制器,手动型的Segue需要设置一个标识符,在需要的时候,使用perform方法来执行对应的Se...

2017-07-29 10:26:03 439

原创 ios-block补充

我们如果想要在函数中添加一个block参数,我们可以这么做typedef void (^Block)();void test(Block block){ block();} Block block1=^{        NSLog(@"----");    };test(block1);//这样就可以了也可以这么做,就是直接把符合要求的代码段直接写在小括号中

2017-07-28 17:20:20 327

原创 ios-Storyboard Segue

当我们在storyboard中拖了一个navigationController之后,然后我们在它的子控制器中添加了个按钮,再通过这个按钮进行show来进行控制器跳转的会实现以下方法-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ segue.destinationViewController//就可以

2017-07-28 15:53:19 376

原创 ios-创建根视图控制器的三种方式

1、纯代码创建根视图控制器,在Appdelegate中的didFinishLaunchingWithOptions self.window =[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; //设置窗口根窗口控制器 self.window.rootViewController //将窗口作为主窗口

2017-07-28 11:17:53 4230

原创 ios-pch文件的补充h和NSLog

我们如果想把我们的项目从调试版本改成发布版本就需要这么做,先点击这里然后把这里的Debug改成Release我们在pch文件中加上这个就可以用我们自定义的输出了#ifdef DEBUG#define ZXLog(...) NSLog(__VA_ARGS__)#else#define ZXLog(...)#endif当然你可以把ZXLog改成其他的,这里的意思就是如果是发布版本ZXL...

2017-07-27 19:13:33 377

原创 ios-info.plist文件和pch文件的一些介绍

原本你的项目名字是什么,你的app的名字就是什么,但是你可以在info.plist文件中就行修改,如果没有这个Bundle display name就添加一个,然后在这里就行修改可以了。Bunle versions string.short就是你应用的版本号,就比如你在应用商店里看到的。7.3.1啊这些啊其实就是通过这个来配置的。Bundle Identifier是应用的唯一标识符,就好比

2017-07-27 18:08:18 308

原创 ios-延展Extension

其实Extension是个特殊的分类,延展也是类的一部分,延展只有声明没有实现,延展这个特殊的分类是没有名字的,如下所示@interface 本类名 ()@end和本类共享一个实现。分类和延展的区别分类有名字,延展没有名字每一个分类都有单独的声明和实现,延展却只有声明,没有单独的实现延展中的任意成员都可以写,分类就能增加方法分类中可以写@property,但是只会生成

2017-07-26 22:36:06 462

原创 ios-动画实现修改约束

我们可以试着在storyboard中设置了一个view控件的的约束大小,然后通过拖线的方式去把这个view在控制器中引用,然后在代码中我们就可以修改这个view的相应的约束对象的值了,就比如说我们拖线过来引用的属性是NSLayoutConstraint * ViewTop,然后我们如果调用下面代码想用动画的效果让控件发生移动是不行的。 [UIView animateWithDuration:1.5

2017-07-26 17:48:16 1066

原创 ios-代码实现autolayout

首先我们要利用NSLayoutConstraint类创建具体的约束对象添加约束的对象到具体的view中-(void)addConstraint:(NSLayoutConstraint *)constraint;-(void)addConstraints:(NSArray *)constraints;代码实现autolayout的注意地方1、要禁用autoresizing功能设置

2017-07-26 17:23:51 273

原创 ios-autolayout添加约束的规则

1、如果添加的约束和其他控件没有关系就会添加到自己身上了。比如说这样我们给button添加约束高和宽给定死的值就会添加到该button下面如图2、如果是父子关系,设置子控件的约束和父控件相关,约束会添加到父控件上如在button中添加在父控件中水平垂直居中显示下图3、如果是兄弟关系的控件,设置两个兄弟约束会添加到第一个共同的父控件上。比如把button1和button2设置为等高等

2017-07-26 16:25:20 435

原创 ios-屏幕适配

其实有的时候我们会发现在iphone6,iphone6 plus中运行的一个程序的启动图实际上是640*1156的是给4英寸的Retain屏来用的,那么为什么会在4.7英寸中也可以用呢,其实就是因为这个程序的启动图片就是只有这么大,然后手机就会根据这么大的图片来进行拉伸操作。就好比iphone6的屏幕是375*667,iphone 5s是320*568。appstore上在iphone6出来之前肯

2017-07-26 15:19:58 311

原创 ios-ARC和垃圾回收机制的区别

在java中有个垃圾回收器,什么是垃圾回收器,就是在程序运行的期间,垃圾回收器会不断的去扫描堆中的对象是否无人使用。如果无人使用就会回收了。ARC在编译的时候就会在合适的地方插入retain,release,autorelease,在运行的时候没有东西去进行实时检查,它插入的代码可以在对象没有人用的时候,引用计数器就会变为0.一旦变为0就会被销毁了。如果在java中有一段代码是Person

2017-07-25 23:14:21 1072

原创 ios-Category补充

在分类中我们可以写@property但是不能在interface中定义变量在分类中写的@property不会生成私有变量比如说你定义了个int age属性不会生成_age这个私有变量在分类中写的@property不会自动生成getter和setter方法,只会生成getter和setter方法的声明在分类中不可以直接访问在在最开始那个类中的生成的私有变量,就比如说有Student类和S

2017-07-25 22:04:59 330

原创 ios-注意事项

如果某个控件没有显示出来的原因可能是1、frame属性是否没有设置为0,位置不对2、是否隐藏了,hidden=YES;3、有没有添加到父控件当做4、透明度也就是Alpha是不是小于0.015、是不是被其他控件给挡住了。第五点可以这么解决self.view bringSubviewToFront:(UIView)在layoutSubviews方法是在当某个控件的fra

2017-07-25 18:02:00 231

原创 ios-关于cell的模板

我们如果要自定义一个cell可以用代码来设计自定义cell也可以通过xib来创建cell还有种方法,就是可以通过我们在storyboard中拖一个UITableViewController,会有一个自带的Cell我们可以通过这个自带的cell来设计成一个cell的模板。在这个storyboard中的cell来创建一个cell,我们可以在cellForRowAtIndexPath中这么用,记得在Ce

2017-07-25 16:49:27 433

原创 ios-strong和weak

在ARC机制下只有没有任何强类型的指针指向对象的时候,这个对象就会被立刻回收。@property中如果不写strong和weak默认就是strong在ARC机制下,如果属性的类型不是OC的对象就用assignstrong和weak都是应用在OC对象中的在ARC机制中,属性的类型是OC对象的时候,绝大多数都是用strong在ARC机制下,当两个对象相互引用的时候,如果两边都用st

2017-07-24 22:21:24 464

原创 ios-监听键盘的弹起事件

监听键盘的弹出事件,系统是通过一个通知来实现的,所以我们要监听这个通知,就能监听到键盘的弹出事件创建NSNotificationCenter对象用来监听通知,这里我们不关心通知的发布者,所以最后一个参数设置为nil。通知的名称是UIKeyboardWillChangeFrameNotification,就是只要键盘的frame发生改变都会发送这个通知NSNotificationCenter

2017-07-24 17:41:27 2308

原创 ios-通知补充

当你要发布通知,监听通知的时候都是要通过NSNotificationCenter来做的,而通知的具体内容则是通过NSNotification,这个是对一个通知的封装,系统的一些事件就是通过通知来进行监听的。一个通知可以被多个方法监听。一个方法可以监听多个通知,个对象可以发布多个通知。另外一个对象可以监听很多通知。下面的这三个方法都可以用来发布通知,第一个方法直接传入一个NSNotification

2017-07-24 16:48:24 299

原创 ios-UI控件的引用和代理用weak

我们知道一般我们采用拖线的方式,生成的属性一般都是@property (weak, nonatomic) IBOutlet UIImageView *Imageicon; 用的是weak其实用strong也没有问题因为没有必要,画个图解释一下吧,因为如果我们在控制器中通过生成可UIButton这个控件,把这个控件加入到self.view中已经形成了强引用了,控制器根本没有必要再对它进行强引用,

2017-07-24 08:38:57 477

转载 ios-结构体和类的区别

1、结构体只能封装属性,类却不仅可以封装属性也可以封装方法。如果一个封装的数据有属性也有行为,就只能用类了。2、结构体变量分配在栈,而OC对象分配在堆,栈的空间相对于堆来说是比较小的,但是存储在栈中的数据访问效率相对于堆而言是比较高3、堆的存储空间比较大,存储在堆中的数据相对于栈而言是比较低的4、如果定义一个结构体,这个结构体中有很多属性,那么这个时候结构体变量在栈中会占据很多空间,这

2017-07-23 14:36:22 1564

转载 ios-野指针和僵尸对象

野指针:指针指向的对象已经被释放,这个指针就称为野指针僵尸对象:1个已经被释放的对象,叫做僵尸对象,如果我们通过野指针去访问僵尸对象可能会出现问题对象回收的本质:是对象占用的空间系统可以分配给别的对象,在没有分配给别的程序之前,这个对象还是在的,数据也是在的,但是这个空间有可能会随时的被分配。在没有分配给别的对象之前是可以访问的,一旦分配给别人就不能访问了。僵尸对象我们在实际应用中不应

2017-07-22 17:40:04 969

原创 ios-MRC下的@property的参数

1、与多线程相关的atomic、nonatomic,atomic是默认参数2、与生成的setter方法的实现相关的参数assign是默认参数、retain3、与生成只读/读写相关的参数readonly、readwrite是默认参数4、与生成的getter、setter方法名字相关的参数automic:如果写了这个参数,那么生成的setter方法的代码就会被加上一把线程安全锁,安全,

2017-07-22 16:58:04 615

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除