IOS上的图形和动画处理 CORE GRAPHICS

iOS 图形编程总结 IOS实现图形编程可以使用三种API(UIKIT、Core Graphics、OpenGL ES及GLKit)。这些api包含的绘制操作都在一个图形环境中进行绘制。一个图形环境包含绘制参数和所有的绘制需要的设备特定信息,包括屏幕图形环境、offscreen 位图环境 和PDF图形环境,用来在屏幕表面、一个位图或一个pdf 文件中进行图形和图像绘制。在屏幕图形环境中进行的绘制限定于在一个UIView 阅读详情

在cocoa touch 中一个应用程序是由多个窗口和视图构成。一个带有用户界面的应用程序至少包含一个窗口,同时可以包含一个或者多个视图。在cocoa Touch中,一个窗口是UIWindow的一个实例,通常,一个应用程序会打开主窗口,然后开发人员向窗口中添加各种视图:如按钮,标签,图像,或者自定义的控件。所有这些与UI相关的组件都由UIKit处理。

图形与动画:在IOS开发中 苹果公司向开发者提供了强大的框架来处理图形和动画,这些框架和技术有:

UIKit:cocoa touch 框架,高层次的框架,允许开发人员创建视图、窗口、按钮和其他UI组件。同时将一些低级别的api引入到易于使用的高级别API中。

Quartz 2D:IOS上绘图的主要引擎;UIKit上就使用Quartz。

Core Graphics:它支持图形上下文、加载图像、绘制图像,等等。

Core Animation 帮助开发者在IOS上实现动画的框架

不同的手机有不同的像素即使是屏幕一样大的手机像素也不一样,开发人员在开发的时候执行相同的代码却要考虑不同的屏幕尺寸和分辨率,为此苹果引入了设备独立的绘图方法。开发者使用相应的api,用点代替像素来代替大小。这样针对同屏幕大小不同像素的手机就可以使用同一份代码了。

view对象中最重要的方法之一是drawRect:。Cocoa Touch在需要绘制这个视图时会自动调用此方法,并通过这个方法要求视图对象在图形上下文中绘制它的内容,在这里图形上下文是Cocoa Touch自动准备的。可以认为图形上下文是一个画布,提供了大量的属性如画笔颜色、画笔粗细等。通过图形上下文,你可以在drawRect:方法里面进行任意的绘图。Cocoa Touch将确保图形上下文的属性应用到你的绘图上。

文本的绘制:

  一、枚举 、加载字体 :字体是图形用户界面显示文本的基础。UIkit为开发者提供高层次ApI来枚举、加载和试用字体,Cocoa Touch 是用UIFont类来封装字体。每个ios设备都内置了系统字体。字体被组织成字体族科(Families),每个族科又包含字样(Faces)。

1、枚举字体族科:

- (void) enumerateFonts { 
for (NSString *familyName in [UIFont familyNames]) { 
    NSLog(@"Font Family = %@", familyName); 
} 
} 

枚举某个族科中的字体for(NSString *font in [UIFont   fontNamesForFamilyName:familyName])

2、

加载字体到UIFont对象中:UIFont *font=[UIFont fontWithName:"HelveticaNeue-Bold" size:12.0f];还可以使用UIFont的实例方法 systemFontOfSize:(或者粗体版本 boldSystemFontOfSIze:)来加载当前设备本地系统字体,而不管它是什么,一般IOS设备默认的系统字体是:HelveTica。

二、开始绘制文本

    NSString内建了一些便利方法可以绘制文本,如:drawAtPoint:withFont:

   NSString中海油一个实例方法可以把文本绘制在一个矩形区域:[myString drawInRect:withFont]

三、颜色的构造、设置和使用

 1、UIKit同时也提供高层次的抽象颜色,封装在对象UIColer对象中。我们可以使用类方法 [UIColor colorWithRed:Green:Blue:alpha:]创建一个UIColor对象来载入所需要的颜色。当拥有一个UIColor对象后我们可以使用UIColor的实例对象set来使当前的图形上下文在后续的绘图中使用该颜色。

2、UIColor 实际上是UIKit对Core Graphic中的CGColor 的一个包装类。当我们在Core Graphics这个较低的层次编程时,我们对于如何使用我们的颜色对象突然有了更多的控制,甚至可以检测颜色的组成部分,根据一个UIColor类型的对象检测其中红、绿、蓝、alpha成份:

a、使用UIColor类的实例方法CGColor实例方法,它会返回一个CGColorRef类型的颜色对象,这是一个Core Graphic Color Reference 对象。

b、使用CGColorGetComponents函数获取组成颜色对象的各个分量;

c、如果需要,使用CGColorGetNumberOfComponents函数来确定组成该颜色的颜色分量的数量(红+绿灯):


UIColor *myColor=[UIColor colorWithRed:0.6 Green:0.8 Blue:0.4:alpha:0.9];//创建UIColor对象来指定所需颜色

CGColorRef *cgColor=[myColor CGColor];//调用UIColor对象的实例方法CGColor 返回CGColorRef类型颜色对象,

const CGFloat *components=CGGolorGeComponents(cgColor);// 获取组成颜色对象的各个分量

NSUInteger componetsCount=CGColorGetNumberOfComponents(cgColor);//计算颜色分量的对象

NSUInteger count=0;

for(;count<componetsCount;count++){

 NSLog(@"componts %lu = %.02f",(unsigned long)count+1,componets[count]);

}

图像的绘制:

   一、同样的UIKit帮助你轻松地绘制图像。你所需要做的是把你的图像加载到UIImage类的实例中。UIImage提供了各种类方法和实例方法来加载你的图像

如:

  imageNamed:类方法,加载和缓存图像 ; imageWithData:类方法,从一个NSData实例中加载图像,NSData实例封装了图像数据并作为参数传入此方法。

initWithContentsOfFile:实例方法(用于初始化)将传入的参数作为要载入图像的路径并用它初始化图像对象。initWithData:实例方法(用于初始化)使用传入的NSData类型的参数初始化图像。该数据应该是一个有效的图像。

二、UIImage类型图像绘制到图形上下文的两种方式:

drawAtPoint: ,UIImage类的实例方法按照图片的原始大小在给定的点位置图像,使用CGPointMake构造点。 drawInRect: UIImage类的实例方法,在给定的矩形区域绘制图像。矩形区域由函数CGRectMake构造。

线条的绘制:

路径是由屏幕上一个或一系列的点构成,路径可以包含许多线条,但线条不能包含许多路径,路径可以理解为一系列的点。

使用路径来绘制直线:

1.为图形上下文选择一个颜色

2.使用UIGraphicsGetCurrentContext函数获取图形的上下文的句柄

3.使用CGContextMoveToPoint 过程设置线条的起点;

4.使用CGContextAddLineToPoint过程在图形上下文移动你的笔画来指定线条的重点;

5.使用CGContextStrokePath过程创建你已经设定好的路径。此过程将使用图形上下文已经设置好的颜色来绘制路径。

构造路径:

    一系列点放在一起,构成了一个形状。一系列形状放在一起,构成了一个路径。通过Core Graphics可以很容易地管理路径。路径属于正在绘制他们的图形上下文。

常用的函数:

  CGPathCreateMutable 过程 :创建一个类型为CGMutablePathRef的可变路径,并返回其句柄。

  CGPathMoveToPoint 过程:在路径上移动当前画笔的位置到一个点,这个点由CGPoing类型的参数指定

CGPathAddLineToPoint 过程:从当前的画笔位置向指定位置绘制线段。

CGContextAddPath过程:添加一个路径到图形上下文,准备用于绘图。

CGContextDrawPath过程:在图形上下文中绘制给出的路径。

CGPathRelease过程:释放为路径句柄分配的内存。

CGPathAddRect过程:向路径添加一个矩形。矩形的边界由一个CGRect结构体指定。

这里有三个重要的绘图方法,你可以让 CGContextDrawPath过程执行他们。

  KCGPathStroke 使用当前选定的描边颜色为路径描边

KCGPathFill使用当前选定的填充颜色填充路径所包围的区域。

KCGPathFillStroke组合描边和填充

绘制矩形:

 CGPathAddRect是Core Graphic中用于路径的过程之一,它可以让你把矩形作为路径的一部分来绘制。

为形状添加阴影:

使用core graphics 绘制阴影非常简单。图形上下文是支撑阴影的元素,这意味着你需要对上下文应用阴影、接着绘制需要阴影的形状,从后从上下文移除阴影。在Core Grahics中,我们可以使用下面两个过程 对图形上下文应用阴影:

CGContextSetShadow过程:

此过程将创建黑色或灰色阴影,它接受三个参数:

1.需要应用阴影的图形上下文。

2.偏移量,由CGSize类型的值指定。偏移量相对于将要应用阴影的形状的右边和底部,x偏移量越大,阴影更向形状的右边延伸。Y偏移量越大,阴影更向形状的底部延伸。

3.要应用到阴影的模糊值,它被指定为一个浮点值(CGFloat). 指定为0.0f将获得平整的阴影。这个值越高得到的阴影更加模糊。

CGContextSetShadowWithColor 过程:除了增加最后一个CGColorRef类型的参数用于设置阴影的颜色,其它参数上一个过程一模一样,

当阴影被设置后,如果不删除 阴影会应用到其它路径当中,为了避免这种情况发生,我们将在应用阴影之前保持图形上下文状态,然后在需要删除阴影效果时恢复原先的状态。一般来说,保存和恢复图形上下文状态并不只限于阴影。恢复图形上下文的状态会恢复一切(填充颜色、字体、线条粗细等)回到之前你为他们设置的值。通过CGContextSaveGState过程保存图形上下文的状态,通过CGContextRestoreGState过程恢复到以前的状态。


创建和绘制渐变:

Core Graphics允许开发者创建两种类型的渐变:线性的和径向的,线性渐变以某种颜色从一点开始,以另一种颜色在其它点结束。

为了创建一个线性渐变,你要调用CGGradientCreateWithColorComponents函数。这个函数的返回值是一个新的类型为CGGradientRef的渐变,这是一个句柄。一旦你不在使用渐变,你必须调用CGGradientRelease 过程,传入之前你从CGGradientCreateWithColorComponents获取到的渐变的句柄来释放资源。

CGCradientCreateWithColorComponents函数需要四个参数:

色彩空间:(Color Space)这是一个色彩范围的容器,类型必须是CGColorSpaceRef.对于这个参数,我们可以传入CGColorSpaceCreateDeviceRGB函数的返回值,它将给我们一个RGB色彩空间。

颜色分量的数组:这个数组必须包含CGFloat类型的红、绿、蓝和alpha值。数组中元素的数量和接下来两个参数密切。从本质来讲,你必须让这个数组包含足够的值,用来指定第四个参数中位置的数量。所以如果你需要两个位置位置(起点和终点),那么你必须为数组提供两种颜色

 位置数组,颜色数组中各个颜色的位置:此参数控制该渐变从一种颜色过渡到另一种颜色的速度有多快。

位置的数量:这个参数指明了我们需要多少颜色和位置。

创建好线性渐变后,我们将使用CGContextDrawLinearGradient过程在图形上下文中绘制,此过程需要五个参数:

Graphics context 指定用于绘制线性渐变的图形上下文。Axial gradient 我们使用CGGradientCreateWithColorComponents函数创建的线性渐变对象的句柄

start point 图形上下文中的一个CGPoint类型的点,表示渐变的起点。End Point表示渐变的终点。 Gradient drawing options 当你的起点或者终点不在图形上下文的边缘内时,指定该如何处理。你可以使用你的开始或结束颜色来填充渐变以外的空间。此参数为以下值之一:KCGGradientDrawsAfterEndLocation扩展整个渐变到渐变的终点之后的所有点 KCGGradientDrawsBeforeStartLocation扩展整个渐变到渐变的起点之前的所有点。0不扩展该渐变。

85、iOS 16 图形与动画开发指南 本博客详细介绍了 iOS 16 中图形绘制与动画开发的基础知识与实现技巧。内容涵盖 Core Graphics 和 Core Image 框架的使用、UIKit 动画的核心类 UIViewPropertyAnimator、动画曲线配置、仿射变换操作,以及一个完整的动画示例应用开发流程。通过丰富的代码示例和流程图解析,帮助开发者掌握 iOS 16 图形与动画开发的核心技术,并提供技术对比、常见问题解决方案与未来发展趋势展望,助力开发者提升应用界面表现力与用户体验。 阅读详情

相关推荐

38、iOS 16 图形绘制教程:使用 Core Graphics 和 Core Image

本博客详细介绍了在 iOS 16 中使用 Core Graphics 和 Core Image 进行 2D 图形绘制和图像处理的技术。内容涵盖 UIView 子类化、draw 方法实现、绘制直线、路径、矩形、椭圆、填充、阴影、渐变等图形效果,以及使用 Core Image 框架进行图像过滤和特效处理。通过示例代码和流程图,帮助开发者掌握 iOS 图形绘制的核心技能,并提供了常见问题解决方案和拓展应用思路,适用于开发具有复杂图形界面或图像处理功能的应用程序。

cicd6pipeline的博客 120

iOS 动画篇 (三) CADisplayLink与CoreGraphics实现动画

  本文主要介绍利用CoreGraphics和CADisplayLink来实现一个注水动画。来一个效果图先:      在介绍注水动画前,先介绍利用CoreGraphics实现进度条的绘制。   一、扇形进度绘制   效果:   代码如下: - (instancetype)initWithCoder:(NSCoder *)coder { self = [super in...

weixin_33966095的博客 327

掌握iOS动画:旋转太极的实现与探索

Core Graphics是苹果公司开发的2D渲染框架,它提供了一组用于渲染和操作图形的C语言接口,即Quartz。Quartz充分利用了CPU和GPU的性能,以硬件加速的方式实现快速渲染,支持矢量图形和位图的绘制。自定义绘图效果的实现是利用CGContextRef的强大力量来完成的,开发者可以控制每一个绘图的细节,从而创造出独特的图形效果。比如,可以创建带有特殊纹理或图案的渐变效果,或者制作复杂的混合模式来模拟不同材质的外观。

weixin_32661831的博客 719

swift 写 iOS 空心字描边动画

参考资料 http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/ https://github.com/ole/Animated-Paths 链接里的范例程序是 Objective-c 写的,这篇基本就是把它翻译成 swift 。 动画预览 开始扯 上篇写了 iOS 的 block-ba

662

深入探索iOS开发:图形、视图与动画

本文详细探讨了iOS开发中的图形处理、视图控制以及动画实现的核心技术。通过对笛卡尔坐标系的应用、图形上下文的操作、以及手势识别器的集成,我们可以更好地理解如何在iOS平台上创建丰富的用户界面和交互体验。

weixin_31659095的博客 621

掌握iOS多媒体编程:图形、动画与多媒体技术

本文还有配套的精品资源,点击获取 简介:本书详细讲解了iOS开发中图形图像、动画和多媒体编程的核心技术,并通过源代码示例和实践帮助开发者深入理解。涵盖Core Graphics、UIKit绘图、Core Image、OpenGL ES、Metal、动画API、AVFoundation、Core Animation、SpriteKit和SceneKit等关键技术点,旨在提升i...

weixin_42594419的博客 887

IOS上的图形和动画处理

在cocoa touch 中一个应用程序是由多个窗口和视图构成。一个带有用户界面的应用程序至少包含一个窗口,同时可以包含一个或者多个视图。在cocoa Touch中,一个窗口是UIWindow的一个实例,通常,一个应用程序会打开主窗口,然后开发人员向窗口中添加各种视图:如按钮,标签,图像,或者自定义的控件。所有这些与UI相关的组件都由UIKit处理。 图形与动画:在IOS开发中 苹果公司向开发者

pop_xiaohao的专栏 2817

完整iOS时钟效果实现项目实战

CADisplayLink是一个定时器对象,专门用于同步视频刷新率。在iOS开发中,CADisplayLink与NSTimer不同,它在每次屏幕显示更新时都会被调用,确保每一帧都准确地与屏幕刷新率同步。这使得CADisplayLink非常适合进行高性能的动画处理,因为它可以减少或消除画面撕裂的问题,提供更加平滑的视觉体验。CADisplayLink的主要特性包括:高精度同步:CADisplayLink提供了一种以帧为单位的定时机制,可以精确到每一次屏幕刷新。使用简单。

weixin_35755823的博客 784

iOS图形和动画处理

在cocoa touch 中一个应用程序是由多个窗口和视图构成。一个带有用户界面的应用程序至少包含一个窗口,同时可以包含一个或者多个视图。在cocoa Touch中,一个窗口是UIWindow的一个实例,通常,一个应用程序会打开主窗口,然后开发人员向窗口中添加各种视图:如按钮,标签,图像,或者自定义的控件。所有这些与UI相关的组件都由UIKit处理。 图形与动画:在IOS开发中 苹果公司向开

极客学伟的技术分享社区 1136

[中文版]iOS上的图形和动画处理(Graphics and Animation on iOS)

本书将以手册的形式指导程序员如何利用Core Graphics、Quartz Core和SDK中出色的图形处理能力编写出iOS应用。 内容涵盖如何自定义字体,载入和使用颜色,绘制渐变色,移动、缩放及旋转图片等等。

Ios上的图形和动画处理

Ios上的图形和动画处理Ios上的图形和动画处理Ios上的图形和动画处理Ios上的图形和动画处理

iOS 逆向学习 - iOS Architecture Media Layer

是 iOS 架构中的第二层,主要负责处理多媒体相关的功能,包括图像、音频、视频、动画、2D/3D 渲染等。在 iOS 开发中,这一层提供了高效的框架和 API,让开发者可以轻松实现多媒体应用。是 iOS 应用开发中处理多媒体的核心部分,它提供了丰富的框架和工具,帮助开发者轻松实现图形渲染、音视频处理和动画效果。

qq_45797625的博客 1703

ios上的图形和动画处理

ios上的图形和动画处理。coreAnimation, Calayer, 适合初级,中级。

ios uilabel 中部分文字 加点击事件_iOS开发常用库总览

框架是一个目录,这个目录包含了共享库,访问共享库里代码的头文件,和其它的图片和声音的资源文件。一个共享库定义的方法或函数可以被应用程序调用。iOS应用程序基于Foundation和UIKit框架在你开发程序时,主要使用框架就是Foundation和UIKit,因为它们包含了你需要的大部分东西。Foundation框架为所有的应用程序提供基本系统服务你的应用程序,UIKit和其它的框架都是建立在Fo...

weixin_29238147的博客 3298

iOS上的图形和动画处理【中文高清书签版】

简介你的iPhone和iPad应用是否具有一些华而不实的图形和动画,使用户的目光投向别处?本书简明扼要介绍了一些Cocoa编程经验,用于创建令人印象深刻的图形和动画效果,同时保持相对简单的编码开发。

Rockit VDEC解码实战:从零构建高效视频处理流水线

本文详细介绍了Rockit VDEC硬件解码模块在RK3568/RK3588平台的应用实践,涵盖开发环境配置、MPI接口使用、码流发送模式选择、内存管理优化及多路解码系统构建。通过实战案例展示如何利用VDEC实现高效视频处理流水线,显著降低CPU占用率,提升嵌入式多媒体开发效率。

ol789012的博客 303

CoreGraphics,QuartzCore, CoreAnimation区别

CoreGraphics,QuartzCore, CoreAnimation区别

逝水无情的博客 864

matlab kwave模拟超声换能器学习笔记

kwave模拟超声换能器的学习笔记,从零开始造车轮

SolvingMaster的博客 3196
上一篇: ZBar和Zxing的区别
下一篇: drawRect
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值