服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS应用开发中矢量图的使用及修改矢量图颜色的方法

iOS应用开发中矢量图的使用及修改矢量图颜色的方法

2021-01-09 17:18WhoJun IOS

这篇文章主要介绍了iOS应用开发中矢量图的使用及修改矢量图颜色的方法,文中的方法是在Adobe Illustrator中绘制矢量图然后导入Xcode中使用,需要的朋友可以参考下

iOS应用开发中矢量图的使用及修改矢量图颜色的方法

之前捣鼓了点东西,要适配6和plus,自己做做切图才发现确实有够烦。基于矢量图生成png图形的方法也是事后才知道,学习下,希望接下来可以实践。下面进入译文。

ios应用的视觉形式通常是以图形元素驱动的。在设计开发一款应用时,你需要不同规格的应用图标,例如不同尺寸的default.png图片,同时还需要为ui的实现准备@1x和@2x图形资源。所有这些图形元素都会让你的产品看上去更吸引人,但弊端也是很明显的 - 你需要为每种规格的图形元素单独切图。而随着iphone 6及plus的发布,我们又多了一套@3x需要处理,事情变得越来越复杂。

幸运的是,苹果在xcode 6当中给我们带来了一些很棒的工具用以管理图形资源。更棒的是,新的工具和实现方式可以帮我们从容的应对未来的ios设备,例如基于storyboard为ios 8设备生成启动图片,这样你就无需再为不同的设备类型单独制作。此外还有一个非常重要的新功能,就是在应用构建阶段基于pdf图片文件自动生成各种规格的图形资源。本文中,我们就来一起探索一下这种能帮你节省大量时间成本的方法。

第一步:使用illustrator生成pdf矢量图形

首先,我们需要pdf格式的矢量图形。你可以使用adobe illustrator或你所熟悉的其他矢量图形工具来生成,@1x规格的即可。

如果你使用illustrator:

为即将导出的图形元素创建新文档,使用@1x规格来设置文档的尺寸。
将需要导出的图形元素复制到新文档当中。
在“file”菜单中选择“save”。
在保存时记得取消勾选“preserve illustrator editing capabilities”。

iOS应用开发中矢量图的使用及修改矢量图颜色的方法

由此导出的pdf是可拉伸的矢量图形,可以在ios中被完美的处理为@2x和@3x规格。下一步,我们看看怎样在xcode当中进行设置。

第二步:在xcode项目文件中进行设置

要使用矢量化的图形资源,你需要在xcode当中通过asset catalog来管理图片。不用担心,你仍可以将标准的图形导入方式与xcassets混合起来使用,不会产生问题。执行以下步骤:

  • 如果还没有xcasset文件,那么创建一个。如果已经创建过,就在项目中打开。
  • 在“editor”菜单中选择“new image set”。
  • 在新创建的图片集中,选择空的图片集,然后打开utilities面板。
  • 选择属性检查器attributes inspector。
  • 在类型下拉列表中,选择“vectors”。
  • 图片集会变为只有一个拖放点的“all - universal”。
  • 将你的pdf矢量图形拖放到图片集当中。

iOS应用开发中矢量图的使用及修改矢量图颜色的方法

接下来,你可以像以往一样使用image catalog中的图形资源,通过代码或interface builder均可。例如在代码中使用“imagenamed:”+图片集名称的字符串。

第三步:见证神奇时刻

xcode在构建项目时会基于asset catalog中的pdf矢量图形自动创建@1x、@2x和@3x三种规格的png文件。举例说,你为xcode提供了一个@1x规格的,尺寸为150px*150px的pdf文件,那么xcode会自动创建下列png图形:

@1x规格,尺寸为150px*150px
@2x规格,尺寸为300px*300px
@3x规格,尺寸为450px*450px
应用运行时,ios会根据不同的设备类型从上面三种图形资源中挑选出恰当的规格进行输出。另外记得为autolayout设置好约束,确保图形不会在大尺寸设备上被拉伸。xcode所做的是基于pdf矢量图形创建png文件;应用运行时所输出的仍然是栅格化的图片,而非可以自动伸缩的矢量图形。

注意

  • 矢量图形的支持只是阶段性的 - 在构建阶段,xcode会基于pdf生成png图片并输出到界面当中。
  • 一旦完成矢量图形的设置,你就无法为其指定新的输出尺寸了。如果需要更大的规格,则需要创建新的pdf图形,否则在使用autolayout时原来的图片会失真。
  • 正如前面所说的,ios 8只能支持基于pdf生成的png文件;但os x却可以真正完整的支持矢量图形,你可以直接通过auto layout或代码来缩放矢量图形,不会产生任何失真。
  • 这种方式无法兼容ios 7之前的系统,因为相关的图形资源都是通过asset catalog管理的。
  • 如果你已经使用了类似的脚本或工具来自动生成多种规格的图形资源,那么这种方式不会给你带来太多用处。不过,如果你的应用同时拥有os x和ios两种版本,并且会用到一些相同的图形,那么这种方法将会是事半功倍的。

改变矢量图的颜色

为啥要改变矢量图的颜色呢,直接叫设计师切个图不就好呢。

主要最近呢,设计师回家了,没办法只有一张图,我又懒的用ps。

就给自己弄了个课题。

其实也简单在ps中也不就是选中选区,填充颜色,然后保存。

在ios也是差不多的。

 

在ios也是差不多的。

复制代码 代码如下:


//uiimage+imagecolor.h
#import <uikit/uikit.h>
@interface uiimage (imagecolor)
/**
 *  修改矢量图颜色
 *
 *  @param      maskcolor 修改颜色
 *  @return
 */
- (uiimage *)imagemaskwithcolor:(uicolor *)maskcolor;
@end
//uiimage+imagecolor.m
#import "uiimage+imagecolor.h"
@implementation uiimage (imagecolor)
- (uiimage *)imagemaskwithcolor:(uicolor *)maskcolor {
    if (!maskcolor) {
        return nil;
    }

 

    uiimage *newimage = nil;

    cgrect imagerect = (cgrect){cgpointzero,self.size};
    uigraphicsbeginimagecontextwithoptions(imagerect.size, no, self.scale);

    cgcontextref context = uigraphicsgetcurrentcontext();
    cgcontextscalectm(context, 1.0, -1.0);
    cgcontexttranslatectm(context, 0.0, -(imagerect.size.height));

    cgcontextcliptomask(context, imagerect, self.cgimage);//选中选区 获取不透明区域路径
    cgcontextsetfillcolorwithcolor(context, maskcolor.cgcolor);//设置颜色
    cgcontextfillrect(context, imagerect);//绘制

    newimage = uigraphicsgetimagefromcurrentimagecontext();//提取图片

    uigraphicsendimagecontext();
    return newimage;
}
@end


总结:
设计师能给你切全套那是最好的,自己也省事。
不过嘛,这个是有好处滴,可以节省app大小,可以省去按钮的高亮、选中等等图片。

延伸 · 阅读

精彩推荐
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28