跳至正文
首页 » 博客 » iOS Vs Android – How To Draw – Part 2 – Styling

iOS Vs Android – How To Draw – Part 2 – Styling

到目前为止,我的博客文章主要围绕着objective-c中的iOS编程。有一些关于C # 的帖子,但是他们更多的是关于从C # 到objective-c的切换。

然而,在过去的一年里,我一直在iOS和Android开发之间平均分配我的时间。

由于越来越多的移动应用程序开发人员同时支持这两个平台,我想为什么不博客两个平台!

这一系列的帖子将围绕在这两个平台上绘制各种各样的东西。你会惊喜地发现两者实际上非常相似!

第1部分-图纸简介

第2部分-造型

第3部分-绘制形状

第4部分-图纸文本

第2部分-造型

接下来,我们将讨论如何为您的图纸设置颜色,笔触和其他绘画类型的标志。

这是Android和iOS有轻微偏差的地方。在iOS中,您可以直接在CGContextRef上设置这些属性,在Android中,您必须创建一个名为Paint的辅助对象,其中所有这些属性都存在。

首先让我们看一个基本的,背景颜色

iOS系统

CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);

Android

油漆p = 新油漆 ();
setColor(Color.RED);

注意,在Android代码片段中,我们必须创建一个paint对象。在iOS代码片段中,我们使用我们的上下文,并调用静态方法来设置颜色。

现在让我们看看添加一个笔画,这是一个有点棘手:

iOS系统

CGContextSetStrokeColorWithColor(ctx, [UIColor blackColor].CGColor);
CGContextSetLineWidth(ctx, 2);

安卓系统

油漆p = 油漆 (); 
p.setColor (颜色。黑色 );
p.setStrokeWidth( 2 );

在iOS中,它就像我们做的背景颜色,我们只是适当的属性,虽然不是它被称为笔画宽度,它被称为线宽。不过,在Android中,您应该注意,我们设置的颜色属性与我们为背景色设置的属性相同。这意味着如果你想中风是相同的颜色作为背景颜色,你必须绘制你的路径两次,用2个不同的油漆对象。

绘图时一个方便的技巧是剪辑您的区域。例如,您可能希望限制用户看到的内容,但很难达到该限制。所以,相反,你在你的视口之外绘制,但你剪辑了它之外的一切:

iOS系统

CGContextClipToRect(ctx,cgrect制造 (0,0,100,100));

安卓系统

canvas.clipRect (新的android.graphics.Rect(0,0,100,100));

下一部分不是很造型,但它确实会影响绘图的结果。变换。使用变换,可以在图形上下文中旋转或移动要绘制的点。

在Android和iOS中,它们的处理方式非常相似:

iOS系统

CGContextTranslateCTM(ctx, x, y);
CGContextRotateCTM(ctx, radians);

Android系统

canvas.translate(x,y);
canvas.rotate (度);

在iOS中值得注意的是,旋转是在弧度,而在Android中它的度!

最后,在绘图框架中,您通常会传递您的上下文 (CGContextRef和Canvas),这意味着某些样式属性或转换可能会应用于您的上下文,不应该在任何地方应用。例如,我可能为我正在绘制的矩形设置旋转变换。但是,当我稍后去画一条线时,我可能不想要那个变换!这是否意味着我必须撤消变换?还是有捷径?

这就是保存/恢复发挥作用的地方:

iOS系统

CGContextSaveGState(ctx);
//
CGContextRestoreGState(ctx) 的绘图代码;

Android系统

canvas.save();
//
canvas.restore() 绘制代码;

基本上,当你在你的上下文中调用保存时,你说的是记住我保存之前的所有设置,当你稍后调用restore时,它会将其恢复到上次保存。和保存/恢复是基于堆栈的,这意味着你可以多次调用保存,然后恢复后:

例如:

Save() // 1

Save() // 2

Restore() // 在2之前恢复

Restore() // 在1之前恢复

这涵盖了造型的基础知识。

敬请关注了解绘画!

史蒂芬·扎哈鲁克 (SteveZ)