长路漫漫,唯剑作伴--小技巧

一、UIImageView添加圆角

  1. 第一种方法:通过设置layer的属性,但是最影响性能

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
     //只需要设置layer层的两个属性
     //设置圆角
     imageView.layer.cornerRadius = imageView.frame.size.width / 2;
     //将多余的部分切掉
      imageView.layer.masksToBounds = YES;
      [self.view addSubview:imageView];
  2. 第二种方法:使用贝塞尔曲线UIBezierPath和Core Graphics框架画出一个圆角

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
        imageView.image = [UIImage imageNamed:@"1"];
        //开始对imageView进行画图
        UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0);
        //使用贝塞尔曲线画出一个圆形图
        [[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.frame.size.width] addClip];
        [imageView drawRect:imageView.bounds];
    
        imageView.image = UIGraphicsGetImageFromCurrentImageContext();
         //结束画图
        UIGraphicsEndImageContext();
        [self.view addSubview:imageView];
  3. 第三种方法:使用CAShapeLayer和UIBezierPath设置圆角

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
        imageView.image = [UIImage imageNamed:@"1"];
        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:imageView.bounds.size];
    
        CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
        //设置大小
        maskLayer.frame = imageView.bounds;
        //设置图形样子
        maskLayer.path = maskPath.CGPath;
        imageView.layer.mask = maskLayer;
        [self.view addSubview:imageView];
  4. 这三种方法中第三种最好,对内存的消耗最少啊,而且渲染快速。

二、计算方法执行时间

CFAbsoluteTimestartTime =CFAbsoluteTimeGetCurrent();

//在这写入要计算时间的代码

...

CFAbsoluteTimelinkTime = (CFAbsoluteTimeGetCurrent() - startTime);

NSLog(@"Linked in %f ms", linkTime *1000.0);

三、

时间: 2024-10-05 06:16:28

长路漫漫,唯剑作伴--小技巧的相关文章

长路漫漫,唯剑作伴--Core Animation优化

一.简介 当App发展到一定的规模,性能优化就成为必不可少的一点.但是很多人,又对性能优化很陌生,毕竟平常大多时间都在写业务逻辑,很少关注这个.最近在优化自己的项目,也收集了很多资料,这里先浅谈一下使用Instruments中CoreAnimation优化收获的经验以及总结,这是第一篇,后续会更新Timer Profiler,Leaks等其他优化工具的具体用法. 二.准备工作 在性能优化中一个最具参考价值的属性是FPS:全称Frames Per Second,其实就是屏幕刷新率,苹果的iphon

长路漫漫,唯剑作伴--Core Animation

一.UIView和CALayer 关系 在创建UIView对象时,UIView内部会自动创建一个层(即CALayer对象),通过UIView的layer属性可以访问这个层.当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的层上,绘图完毕后,系统会将层拷贝到屏幕上,于是就完成了UIView的显示. 换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能. 两者都有树状层级结构,layer 内部有 SubLayers,View 内部有

长路漫漫,唯剑作伴--基础

一.结构体 结构体定义 struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩 } 结构体变量 struct stu stu1, stu2; struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩 } stu1, stu2; s

长路漫漫,唯剑作伴--MVVM

开篇 MVC Model-View-Controller是一个用来组织代码的权威范式.Apple甚至是这么说的.在MVC下,所有的对象被归类为一个model,一个view,或一个controller.Model持有数据,View显示与用户交互的界面,而View Controller调解Model和View之间的交互. MVVM MVVM的出现主要是为了解决在开发过程中Controller越来越庞大的问题,变得难以维护,所以MVVM把数据加工的任务从Controller中解放了出来,使得Contr

长路漫漫,唯剑作伴--胡乱来一套

//第一种方法 NSDate *start = [NSDate date]; //2.根据url地址下载图片数据到本地(二进制数据) NSData *data = [NSData dataWithContentsOfURL:url]; NSDate *end = [NSDate date]; NSLog(@"第二步操作花费的时间为%f",[end timeIntervalSinceDate:start]); //第二种方法 CFTimeInterval start = CFAbsolu

长路漫漫,唯剑作伴--问题答案

一.使用atomic一定是线程安全的吗? 回答 不是 对于atomic的属性,系统生成的 getter/setter 会保证 get.set 操作的完整性,不受其他线程影响.比如,线程 A 的 getter 方法运行到一半,线程 B 调用了 setter:那么线程 A 的 getter 还是能得到一个完好无损的对象. 对于nonatomic的属性,当其中一个线程正在改写某属性值的时候,另外一个线程也许会突然闯入,把尚未修改好的属性值读取出来.发证这种情况时,线程读取到的属性值肯能不对. 当使用a

长路漫漫,唯剑作伴--loadView、viewDidLoad及viewDidUnload的关系

一.loadView 什么时候被调用? 每次访问UIViewController的view(比如controller.view.self.view)而且view为nil,loadView方法就会被调用. 有什么作用? loadView方法是用来负责创建UIViewController的view 默认实现是怎样的? 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view 如果在初始化UIViewController指定了

长路漫漫,唯剑作伴--Automatic Reference Counting

一.简介 ARC,自动引用计数,是指iOS的内存管理使用引用计数的技术. 在OC中采用Automatic Reference Counting的机制,让编译器进行内存管理.在新一代的Apple LLVM编译器中设置ARC为有效状态,就不用再次键入retain.release代码,这在降低程序崩溃.内存泄漏等风险的同时,很大程度上减少了开发程序的工作量.编译器完全清楚目标对象,并能立刻释放那些不再被使用的对象(有待斟酌).如此一来,应用程序将具有可预测性,且运行流畅,速度也将大幅提升.(摘自苹果官

长路漫漫,唯剑作伴--Life Circle

一.load 和 initialize load 在load中使用其他类是不安全的,因为其它类不一定加载完毕: load方法不遵循继承规则,也就是说,如果某个类没有实现load方法,那么不管这个类的所有超类是否实现了这个方法,这个类都不会调用load 如果类和分类都实现了load方法,两个类都会执行load,类先执行,分类后执行: 实现了load方法的这个类,不管在程序运行中是否用到,程序在启动时都会把每个类中的load方法调用一次(这个和initialize不同). initialize 它是