ios 仿某d的头像画圆

今天学习某app,用名字做头像,画圆,里面写字

一开始,打算做头像是image格式。所以就:

CGRect rect = CGRectMake(0.0f, 0.0f, size.width, size.height);

UIGraphicsBeginImageContext(rect.size);

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context, [color CGColor]);

CGContextFillEllipseInRect(context, rect);

//写字

CGContextSetLineWidth(context, 1.0);

CGContextSetRGBFillColor (context, 0, 0, 0, 1);

UIFont  *font = [UIFont boldSystemFontOfSize:12.0];

[sting drawInRect:CGRectMake(3.5, 7.5, 25, 15) withFont:font];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return image;

但是返回的圈圈不平滑,有锯齿。蛋疼。。

然后,就重写view的drawrect方法

- (id)initWithFrame:(CGRect)frame {

self = [super initWithFrame:frame];

if (self) {

[self setBackgroundColor:[UIColor clearColor]];

}

return self;

}

- (void)drawRect:(CGRect)rect

{

//一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画

CGContextRef context = UIGraphicsGetCurrentContext();

//画圆

CGContextSetFillColorWithColor(context, self.imgColor.CGColor);

CGContextFillEllipseInRect(context, rect);

//写字

CGContextSetLineWidth(context, 1.0);

CGContextSetRGBFillColor (context, 0, 0, 0, 1);

UIFont  *font = [UIFont systemFontOfSize:12.0];

[self.title drawInRect:CGRectMake(3.5, 8, 25, 15) withFont:font];

}

这个是解决了问题,但是强迫症的我。。。头像不是应该图片吗。。而且,就算不是。。上面那个问题也没有解决。这可不行。。

然后有高手提示我“理解是绘制到image上的土,设置为retain分辨率,而view中获取的context本身就是retain”,

于是,第一个方法中画图的方法,只需要把绿色的地方,换成下面这行代码

UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);

这个方法scale参数最好是设置成[UIScreen mainScreen].scale,为什么呢。。跟系统一致麻。。

好了,希望对大家有用,反正我也是为了自己以后能复用。。

时间: 2024-11-08 23:59:58

ios 仿某d的头像画圆的相关文章

ArcGIS JS 学习笔记2 实现仿百度的拖拽画圆

一.前言 吐槽一下,百度在国内除了百度地图是良心产品外,其他的真的不敢恭维.在上一篇笔记里,我已经实现了自定义的地图测量模块.在百度地图里面(其他地图)都有一个周边搜索的功能,拖拽画一个圆,然后以圆半径进行搜索(也就是缓冲区╮(╯_╰)╭). 这次的目标,就是要山寨这个拖拽画圆的功能,我先放一个效果图. 二.开始山寨 我们先想一想要实现这个功能需要哪些步骤. 拖拽 画圆 通知拖拽结束 2.1 实现拖拽 关于拖拽,有graphicslayer的拖拽事件和map的拖拽事件,如何选择呢?先来看一看官方

三次贝塞尔曲线画圆的方法。

上一篇说的仿58同城loadingview的项目.中有一个利用贝塞尔曲线进行绘制圆的步骤,这个贝塞尔曲线理论挺复杂,特此单独说一下所知的和能用到的. 比方上一个loadingView的项目中.要用到Path.cubic()来使用贝塞尔曲线画一个圆,那么首先要了解的是 Path.cubic()方法的定义: void cubicTo(float x1,float y1,float x2,float y2,float x3,float y3) Add a cubic bezier from the l

IOS仿Android九宫格解锁效果[转]

原理很简单,监听view中touch的一系列事件,当判定手指位置在某个按钮附近的时候则判断此按钮选中,并画出线. 效果图如下: 你可以在NineGridUnlockView.m文件中方法 touchesEnded:withEvent: 的最后添加自己的代码来决定画线完成后来做什么. (当前工程还没有加入委托,后续可能加上) 代码地址: https://github.com/lcwangchao/NineGridUnlocker IOS仿Android九宫格解锁效果[转]

iOS quartzCore第五章——CAShapeLayer画各种图形 结合UIBezierPath

CAShapeLayer 是 CALayer 的子类,但是比 CALayer 更灵活,可以画出各种图形,当然,你也可以使用其他方式来画,随你. 首先CAShapeLayer 自身有path ,fillColor ,fillRule ,strokeColor ,strokeStart , strokeEnd , lineWidth(线宽,用点表示单位) ,miterLimit ,lineCap(线条结尾的样子) , lineJoin(线条之间的结合点的样子), lineDashPhase 和lin

前端入门之CCS 2 选择器优先级,调节标签样式,字体属性,文本属性,背景, 边框,画圆,display属性,盒子模型,浮动(clear属性),溢出属性,定位,z-index,透明度

选择器的优先级问题 1.选择器相同 就近原则 2.选择器不同 行内 > id选择器 > 类选择器 > 标签选择器 除此之外还可以通过添加 !important方式来强制让样式生效,但并不推荐使用.因为如果过多的使用!important会使样式文件混乱不易维护. 万不得已可以使用!important <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

简单谈谈自己对htm与css中画圆的理解。

近几天,在利用css编辑中,发现不少边框图像要求是矩形圆角或者直接画一个圆的例子,下面和大家一起分享下对画圆的看法. 在这次的分享中,我侧重给大家看一些例子来更好的理解, 我们都明白,画圆时要用到“border-radius:”,而且在每次画圆时,我们都应该先设定一个width和height. 那么我们可以这样理解, 我们的圆是在一个矩形(正方形)中进行裁剪的,而border-radius就是我们要裁剪的尺寸. 给大家一些图片,更好的去理解. 首先,我们设定一个width为100px,高度为10

圆角背景实现,如实现圆角按钮;用xml文件画圆

项目中为了更好的视觉效果,然后又懒的去弄图片做背景时,往往就会通过xml布局文件来实现圆角的效果. 在drawable目录下新建一个shape类型的xml文件,设置<corners android:radius="5dp" />,然后在需要设为圆角的控件中,如按钮或LinearLayout,设置他们的background为drawable="@drawable/...".即可达到圆角的效果 // 用xml文件画圆 用竖线连接ListView的各个item

汇编画圆

汇编画圆-->效果如下图 代码如下: 1 dseg segment 2 center_x dw 150 ;原点坐标_x 3 center_y dw 90 ;原点坐标_y 4 radius dw 50 ;半径_r 5 label_x dw ? ;外接正方形右边界 6 label_y dw ? ;外接正方形下边界 7 distance dw ? 8 dseg ends 9 cseg segment 10 assume cs:cseg , ds:dseg 11 start: 12 mov ax , d

中点画线法画圆

中点画线法已经在画直线的时候详细讲过了,画圆时我们也可以用这种方法.画一个圆心为坐标原点的1/4圆,然后对其进行简单几何变换,平移对称,就可以得到任意圆. 类似的用中点画线法,从(0,r)点开始,每次要么向右走,要么向右下走,直到x==y,即到达四分之一圆处: (1)当d<0时,中点在圆内,则取正右方的点,(x+1,y+0.5),此时d=d+2*x+3; (2) 当d>=0时,中点在圆外,则取右下方的点,(x+1,y-1),此时d=d+2*(x-y)+5; (3) d0=1-r,即点(0,r)