扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要为大家展示了“使用Quartz2D会遇到什么问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“使用Quartz2D会遇到什么问题”这篇文章吧。
创新互联制作网站网页找三站合一网站制作公司,专注于网页设计,网站制作、做网站,网站设计,企业网站搭建,网站开发,建网站业务,680元做网站,已为成百上千服务,创新互联网站建设将一如既往的为我们的客户提供最优质的网站建设、网络营销推广服务!这里交代一些作图时可能遇到的问题:
问题一:当同时画多条线时,在第一条线设置属性后,后面画的所有线都会延用这些属性来绘制。
其实解决的方法很简答,就是在绘制一条新的线条时重置下绘制的属性即可,比如,在画第一条是的属性设置是:
CGContextSetLineWidth(ctx,12); //线条宽度
[[UIColor redColor]set]; //线条颜色
CGContextSetLineCap(ctx,kCGLineCapRound); //端点样式
在绘制第二条线时不想要延用这个属性继续绘制,那么可以重置这些属性:
CGContextSetLineWidth(ctx,1);
[[UIColor blackColor]set];
CGContextSetLineCap(ctx,kCGLineCapButt);
但是这样就出现了新的问题,如果绘制的线条过多,每次到新的线条都要重置属性,这样操作起来就会非常麻烦。当然了,苹果不可能没想到这样的问题,自然也有相应的解决方法了。不过在这之前我们要了解一个新的概念-----图形上下文栈:用于保存图形上下文的状态。
大体过程是:在设置完第一条线的绘制属性前,我们先保存一份最纯洁的图形上下文(此时是没有做过任何操作的图形上下文),然后设置完第一条线,到第二条线之前,我们拿出之前保存的图形上下文绘制,这样第二条线绘制的属性其实就是系统默认的属性了。
获取完图形上下文后,调用函数CGContextSaveGState(ctx);
在需要重置属性的线条前面调用函数CGContextRestoreGState(ctx);即可
非常简单的两部,但是要说明的是,每次保存都是一份,调用一次之后就没有了,如果要重置几次就保存几次,然后调用,如果调用次数大于保存次数会直接挂掉哟~
问题二:绘制矩形时如何让矩形旋转角度?
这样的情况我们在开发中可能会遇到,这个问题的解决就是使用系统自带的函数即可。
1、.....获取上下文,然后
2、CGContextRotateCTM(ctx,M_Pi_4);
3、....设置绘制属性
4、....渲染
以上方法用于旋转角度的属性设置,要注意的是:这里的旋转不是将绘制的图形旋转,而是将整个layer旋转,而所有的绘制都是在layer上进行的,所以这个函数要在绘制属性设置之前就调用,不然无效。
除了旋转以外,还有缩放和平移。
CGContextScaleCTM(ctx,x,y); //缩放(x代表宽的倍数,y代表高的倍数)
CGContextTranslateCTM(ctx,x,y); //平移(x、y分别代表x、y上的偏移量)
问题三:如何让绘制的图片显示成圆形?
解决这个问题的思路:先画一个圆形,把图片绘制在这个圆里面,超出这个圆形范围的部分不显示。具体的代码:
1、获取上下文...
2、CGContextAddEllipseInRect(ctx,CGRectMake(100,100,50,50)); //画一个圆心在(100,100),半径为50的圆形
//关键的一步
3、CGContextClip(ctx); //指定上下文中可以显示内容的就是上面画的图形的范围
4、把图片绘制到(100,100)的点即可。
当然了,正式项目中根据不同的需求,可以让图片显示在矩形、三角形或者其他各种形状里。
以上是“使用Quartz2D会遇到什么问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流