[IOS]CoreAnimation基础[翻译2部分]

iOS CoreAnimation专题——总览篇 本专题将详细介绍iOS CoreAnimation框架,我们将从原理等理论知识开始,详细的探究iOS中的绘图和动画(实际上CoreAnimation框架更多的是处理的绘制,动画只是衍生产品)。当你们完全掌握了本专题的知识后,在界面的实现上你会非常的得心应手,无论产品经理或者客户给了你们多么炫酷的界面效果,你们至少都能找到实现思路而不会茫然不知无从下手 阅读详情

设置图层对象

图层对象是你使用CoreAnimation(以下皆称CA)所进行交互的中心。图层管理你app中的视图内容,并且给这些内容提供可修改的样式和视觉外貌。因为OS X和IOS的不同,要使用CA必须开启该功能,以下一小节将了如何在OS X中开启改效果,所以就略过。



改变一个与视图所关联的图层对象

图层所关联的视图默认创建一个CALayer实例,并且大多数情况下,你并不需要一个不同的图层对象。然而,CA提供了不同的图层类,每一个图层类都提供特定用途。选择某一个不同的图层类可能会提高性能,或者以一种简单的方式来支持某一种视图内容行为。比如CATiledLayer类为展示大图片提供了更高的效率。


改变UIView的Layer Class

你可以重写视图的layerClass方法,以使得该方法返回某一特定的图层类。大多数IOS视图创建CALayer对象,并使用该对象作为后备存储(backing store)。然而对于大多数你自己的视图,这种默认的选择也是很不错的,所以除非必要,不要改变。但是你可能发现某一类型的图层类型更适合在某些情况下。比如,你可能会想要改变图层类型在以下情况的时:

1.你的视图使用到OpenGL 来绘图,这种情况下 你就要用到CAEALLayer对象。

2.某一类的图层类提供了更好的性能。

3.你想要CA图层中的某些特性。比如粒子发光特效。

改变视图的的图层类十分简单,见以下例子2-1。你唯一需要做的就是重写layerClass方法并且将返回的图层类对象改变成你想要返回的。在显示display画面之前,视图会调用layerClass,并且使用返回的视图对象创建新的图层。一旦完成创建,图层就不能再改变了。

+ (Class) layerClass {

   return [CAMetalLayer class];

}

想要了解更多图层类的更多特性见Different Layer Classes Provide Specialized Behaviors.



不同的图层类提供各种特性

CA定义了许多标准图层类,每一个都有特定的使用环境。CALayer是这些图层类的基类。它定义了这些子图层类所必需支持的,并且是视图类所默认使用的。详细见下表2-1

Class 作用

CAEmitterLayer 用来实现基于CA的粒子发光效果,该图层对象控制粒子的产生。

CAGradientLayer用来绘制有色彩梯度的图层

CAMetalLayer 用来建立和。。。这个确实不太明白

CAEAGLLAyer 主要是开发OpenGL所用的图层

CAReplicatorLayer 当你想要自动复制多个子图层的使用

CAScrollLayer 用来管理大片科幻懂的区域并且有多个子图层

CAShapeLayer 用来绘制基于路径的图形的图层

CATextLayer 主要是用来渲染属性字

CATiledLayer 主要用来管理大的图片,该图片可以奋争若干个小的贴瓷,并且支持缩放其中的内容

CATransformLayer 主要用来渲染3D效果




为图层提供内容

图层是管理你app的内容的数据对象。一个图层内容由包含视觉数据的位图组成。你可以以一下三种方式来提供内容。

1.使用图片作为图层的内容,这种方法能为那些静态的或者极少改变的内容提供良好效果

2.使用委托方式(delegate),让委托来绘制图层内容。这种方式对于那些周期改变内容的视图具有很好的效果。

3.直接定义一个图层的子类,然后自己给图层提供内容。如果你想改变基本的图层绘制方式,或者自定义一个图层,那么就使用该种方式。

你在使用这些方式的时候唯一需要担心的在自己创建图层的时候。如果你的app只包含了图层支持的视图,那么你大可放心的使用。图层支持的视图将以最效率的方式为图层提供其内容。


使用图片作为图层的内容

因为图层仅仅是一个管理位图图像的容器,你可以直接将图片传递给图层的contents属性。给图层的属性赋值图片相当简单,并且能够让你准确的指定你想如何呈现图片。图层使用图片对象的时候并不会创建图片的复制copy。这一机制当你在多处使用该图片的时候并不会产生额外的内存开销。

你传递给图层的图片类型必须是CGImageRef类型。记得一定要使用合适分辨率的图片。



使用委托的方式来提供图层内容

如果你的图层内容经常的改变,你可以使用一个委托对象来提供并更新内容。在展现的时候,图层将调用委托的方法来提供必要的内容。

如果你的委托实现了displayLayer方法,那么委托就要负责创建位图并且将位图赋值给图层的contents属性。

如果你的委托实现了drawLayer:inContext方法,CA创建位图,然后讲图像上下位context画进位图。然后调用你的委托方法来填充位图。你的委托方法需要的就是将必要的内容画进去。

委托对象必须实现displayLayer或者drawLayer:inContext两个方法中的任意一个。如果两者都实现了,那只会调用displayLayer方法。

当你的app更倾向于加载或者创建它所想要展示的内容的情况下,重写displayLayer方法将会是最适合的。LIst2-3展示一个例子来实现displayLayer委托方法。在该例中,委托使用了帮助者对象来加载和展示它所需要的内容。委托方法选择哪张图片需要被展示,基于其内部状态。就是例子中displayYesImage属性。


- (void)displayLayer:(CALayer *)theLayer {

    // Check the value of some state property

    if (self.displayYesImage) {

        // Display the Yes image

        theLayer.contents = [someHelperObject loadStateYesImage];

    }

    else {

        // Display the No image

        theLayer.contents = [someHelperObject loadStateNoImage];

    }

}

如果你不想预渲染图片或者预先创建位图,你可以使用drawLayer:inContext方来动态的加载。如2-4所显示的例子。在该方法中委托绘制了一条曲线。

- (void)drawLayer:(CALayer *)theLayer inContext:(CGContextRef)theContext {

    CGMutablePathRef thePath = CGPathCreateMutable();

 

    CGPathMoveToPoint(thePath,NULL,15.0f,15.f);

    CGPathAddCurveToPoint(thePath,

                          NULL,

                          15.f,250.0f,

                          295.0f,250.0f,

                          295.0f,15.0f);

 

    CGContextBeginPath(theContext);

    CGContextAddPath(theContext, thePath);

 

    CGContextSetLineWidth(theContext, 5);

    CGContextStrokePath(theContext);

 

    // Release the path

    CFRelease(thePath);

}


对于定制内容的基于图层的视图,你应重载视图的以上两种方法。基于图层的视图会使自身成为委托,然后实现其两种方法,你并不需要改变其任何配置。作为替代的,你应该重写drawRect方法来绘制你的内容。


通过图层子类提供图层所需的内容

如果你实现了一个定制的图层类,你可以重写你的图层类方法来绘制。通常来说,通过图层来产生内容并不是那么的常见,但是图层确实可以这么做来管理内容。比如,CATiledLayer类管理一个由多块小图所组成的大图片,该图层会分别渲染。只要提供必要的信息,该视图类就会直接绘制其内容。

当使用到子类的时候,你需要遵循以下原则来绘制你的内容:

1.重写图层的display方法,并合理的设置图层属性。

2.重写图层的drawInContext方法,并且在该方法内提供必要的内容

使用以上两种方法决定于你绘制的过程。display方法是你更新图层内容的主入口,所以重写该方法会让你完全的控制绘图过程。重写display方法也意味这你需要创建CGImageRef并赋值给contents属性。如果你仅仅只是想绘制内容,并不想完全的掌控绘图的细节。重写drawInContext方法,图层会为你创建后备存储的。




调整图层内容

当你给你的图层contents属性添加一张图片作为内容时,图层的contentsGravity属性决定了图片时如何适配在当前边界的。默认情况下,图片过大或者过小,图层酒会调整图片成图层的可用大小。如果图层的边界比例与你的图片的比例不一致,这样图片将会失真。所以通过更改contentsGravity属性可以让你的图片适配当前图层。

你可以给contentsGravity属性设置的值可以分为两大类:

1.基于位置的gravity常量能够让你的图片紧贴某一边,或者某一角 而不会调整图片的来适应图层。

2.基于缩放的gravity 常量让你的的图片缩放,保持某一比例或者不保持该比例。

图2-1 展示了基于位置的gravity设置如何影响你的图片。除了kCAGravityCenter常量,其他的常量都会让你的图片紧贴某一边或者某一角。kCAGravityCenter常量,让你的图片居中。这些常量都不会缩放你的图片,所以图片总是以原本的分辨率进行渲染。如果图片大于图层的边界(bounds),那么就进行裁剪。如果图片小于边界,那么如果设置了图层的背景眼,除了图片部分以外的部分将会呈现图层的背景颜色。


图2-2展示了基于缩放的gravity 常量如何影响你的图片。这些常量缩放你的图片如果图片并不能准确的显示在图层中。这些常量的区别在于他们如何去处理图片的原来长宽比例。一些常量会保持原有的比例,而一些并不会。默认情况下,图层的contentsGravity属性被设置成 kCAGravityResize,这也是唯一的常量模式并不会保持图片原有比例。






使用高分辨率的图片

图层并不知道如何处理图片的分辨率。图层仅仅只是存储一个指针,指针指向位图,然后尽可能的以最好的方式呈现像素。如果你将一张图片赋值给contents属性,你就必须通过设置contentsScale属性告诉CA关于图像的分辨率改如何调整,该属性的默认值是1,大多数情况下这个值能合理的处理图片分辨率,但是当用到Retina屏上,就需要设置成2.0。

改变contentsScale属性只有当你直接将位图赋值给图层的时候才需要。在UIKit和AppKit中,基于图层的视图会自动的设置该属性以匹配屏幕。




调整图层的视觉样式和外观

图层对象的内置装饰属性如boder边框,backgroundColor背景颜色,这些可以让你来作为图层主要内容的装饰。想知道这些视觉装饰属性如何影响图层的见Layer Style Property Animations.



图层都有自己的背景色和边框

图层可以显示背景色,并且可以添加上边框。背景色在图层图片内容之下渲染,而边框则是出于最顶层。就像图2-3.如果图层包含子图层,那么子图层也在边框之下。因为背景色是在你图片之下的,所以背景色会透过你图片透明的部分。




如2-5所示,这些代码设置图层的背景色和边框。这些属性都是可以设置动画效果的。

myLayer.backgroundColor = [NSColor greenColor].CGColor;

myLayer.borderColor = [NSColor blackColor].CGColor;

myLayer.borderWidth = 3.0;


如果你的图层背景色是不透明的,记得将图层的opaque属性设置为YES.这样可以提高性能,比如两两个图层部分相互重叠时。切记如果你的图层边角要设置成圆弧的时候 就不要将其设置为不透明YES。



图层支持圆角

你可以改变边角的弧度半径为你的图层添加圆角边框效果。边角弧度半径是一种将原来的直角遮蔽的装饰效果。如图2-4所示,应为涉及到应用透明遮盖问题,边角弧度半径并不会影响图层中内容,除非设置了maskToBounds=YES.但是边角弧度半径总是会影响图片的背景颜色和边框的样子。



如果要让图层能变成圆角,那么就给cornerRadius属性赋值即可。该属性会应用于四个边角,并且优先展示。




图层内置的阴影

CALayer类包含了多种属性,让你来配置阴影效果。阴影效果通过让你感觉内容就像是浮出底层能增加图层的层次感。阴影效果在你app中合理的使用能够为你的app加分增彩。在图层中,你可以控制阴影的颜色,透明度和形状。

图层阴影的opaque值默认是0,也就是不显示阴影。改变该值,会让CA绘制出阴影。因为阴影默认是由图层来调整位置的,所以,你需要指定阴影的偏移offset来调整阴影的位置。特别需要注意的,该偏移是使用图层的内置坐标系。如图2-5所示





给图层添加自定义属性

CAAnimation和CALayer类通过key—value准则来支持自定义属性。你可以利用该特性来添加或得到值通过自定的key。你甚至可以给某一行为添加自定义的属性,这样当你改变该属性的时候,相应的动画就会执行。

更多信息见Key-Value Coding Compliant Container Classes.


iOS CoreAnimation专题——原理篇(四)动画时间控制 这一章虽然叫做动画时间控制,然而我们并不会去深入到一般的动画时间中,我们将讨论的是CoreAnimation框架是如何来控制时间的。 这一章的大部分内容来自http://ronnqvi.st/controlling-animation-timing/,大家可以看看英文原版来加深理解,毕竟翻译能力有限。 阅读详情

相关推荐

iOS CoreAnimation专题——实战篇(三)CADisplayLink高级应用:让视图的四条边振动起来

思路与详细设计 分解思路 1、动画整体效果是四个边从直线变形成二阶贝塞尔曲线。 2、动画过程中实际上是贝赛尔曲线的控制点在垂直于边的方向上来回移动。 3、控制点的移动效果是具有弹性效果的。 4、在控制点移动的过程中根据新的控制点位置每帧重绘边的形状。 详细设计 代码实现 *阻尼振动的运动力学方程 这次让我们来实现一个非常有意思的弹性视图效果,如图 这个例子主要是让大家对C...

DH's Den 1133

IOS 核心动画CoreAnimation

文章目录简介CAAnimation类CAMediaTiming协议常用属性CAAnimation类的代理协议CAAnimationDelegate动画实现步骤举例:CAPropertyAnimiation类CABasicAnimation举例CASpringAnimation 弹簧动画CAKeyFrameAnimation举例CAAnimationGroup动画组CATransition转场动画例...

煮酒Shae 476

CentOS 7 离线升级 OpenSSH 9.9p2 保姆级教程(含依赖包下载与常见报错解决)

本文提供了一份详尽的CentOS 7系统离线升级OpenSSH至9.9p2版本的完整教程。针对无外网环境,重点讲解了依赖包(尤其是OpenSSL 3.x)的离线下载与编译部署,并深入解决了编译过程中常见的“libcrypto.so缺失”等动态库链接错误。教程涵盖从环境准备、源码编译、服务配置到系统集成的全流程,最后还提供了关键的回滚方案与应急预案,是运维人员在内网环境中进行安全加固的实用指南。

weixin_29248313的博客 323

iOS出门必备之CoreAnimation(核心动画)

CoreAnimation 前段时间接触到了一个牛逼的动画框架POP,本来想来装装逼,突然发现,苹果大大的CoreAnimation我还不会用呢! 依稀记得乔帮主在2007年的WWDC大会上亲自为你演示Core Animation的强大:点击查看视频(不好意思,又装逼了) 言归正传,我只是来温习一下CoreAnimation,还望路过的大神不要吐槽我太low 一、Core Animation简介 C

RunningKing 3294

SVG绘制圆环进度条

在我们的大屏可视化项目中,经常会用到各种各样的图表。与传统的表格展示、枯燥的文字阐述相比,图表展示则使用户看起来更加直观、数据的展示则更加一目了然。本文基于svg绘图技术结合前端技术栈vue,以工作中常用的环形进度条为例,简单阐述一下绘制进度条的一些思路。............

qq_40289557的博客 8359

FISCO-BCOS配置及使用控制台

如果因为网络问题长时间无法下载,请尝试:curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh。为了可以更加方便快捷,所以HelloWorld合约已经被内置了,位于控制台下面的contracts/solidity/HelloWorld.sol。用于获取和设置name的值,合约代码如下。部署成功会返回合约地址。

qq_51562644的博客 831

[IOS]CoreAnimation基础[翻译1部分]

CoreAnimation基础1

HeapStackk的博客 807

VSCode多文件C语言项目编译实战:从配置到运行

本文详细讲解了如何在VSCode中配置多文件C语言项目的编译环境。通过手把手教学,指导读者创建项目结构、编写代码,并重点深度配置task.json与launch.json文件,实现一键编译和调试所有C文件,解决常见的“undefined reference”等链接错误,提升开发效率。

g8f9d0s1a2的博客 1098

[IOS]CoreAnimation基础[翻译5部分]

[IOS]CoreAnimation基础[翻译5部分]

HeapStackk的博客 1064

从Demo到产品:基于ADAU1452的ANC方案,硬件选型、性能优化与避坑指南

本文详细解析了基于ADAU1452的主动降噪(ANC)方案从Demo到产品的实现路径,涵盖硬件选型、性能优化与实战避坑指南。重点探讨了ADAU1452与ADAU1466的性能差异、编解码器选型策略,以及MFXLMS算法优化技巧,为工程师提供从理论验证到量产落地的系统级解决方案。

weixin_30542079的博客 451

深度强化学习训练结果曲线绘制教程

使用python语言,只调用matplotlib库,绘制训练过程中保存的强化学习训练曲线。模仿经典论文中的训练曲线,多次训练取平均,并绘制出阴影区域。

加斯顿工程师的博客 910

[IOS]CoreAnimation基础[翻译3部分]

[IOS]CoreAnimation基础[翻译3部分]

HeapStackk的博客 577

微信小程序 - 苹果ios无法播放视频、安卓android手机可以播放,使用video播放MP4视频时安卓正常播放视频iOS无法播放出现黑屏、加载失败或一片黑没反应等(uniapp微信小程序也能解决)

微信小程序ios无法播放视频,微信小程序 video标签 ios不能播放视频或视频黑屏,ios无法播放视频,android手机可以播放,视频格式为mp4,uniapp微信小程序安卓设备android可以播放在线网络视频 ,苹果ios设备无法播放视频,微信小程序 video标签 ios不能播放视频或视频黑屏,安卓手机正常播放iPhone手机却黑屏,如何解决这个问题,在线播放视频URL链接,iOS无法播放MP4视频文件的解决方案,在Android设备上可以正常播放,但在iOS设备上却出现黑屏、无法加载或无法播放

🏆 前端领域优质创作者 1万+

[IOS]CoreAnimation基础[翻译4部分]

[IOS]CoreAnimation基础[翻译4部分]

HeapStackk的博客 523

Unreal 从入门到进阶 之 如何实现Pixel Streaming

Unreal Engine 5 (UE5) 的 Pixel Streaming 是一项基于云端的实时流媒体技术,允许将 UE5 应用的高质量图形渲染结果通过 WebRTC 协议传输到用户的浏览器或轻量级设备,同时将用户输入(如鼠标、键盘、触控)回传到服务器处理。UE的插件相对比较好用,但是就是环境下载总是失败。希望这篇文章对你有所帮助。

TxNet 1368

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

iOS关于核心动画CoreAnimation

一、简单介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。 Core Animation是跨平台的,可以用在Mac OS X和iOS平台。 Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。不阻塞主线程,可以理解为

jake_li的博客 433

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iOS CoreAnimation (九) transform

本系列之前的文章或多或少地提到了 transform,本文进行完全解析。transform 直译就是改变形态、变形、变换,用来改变图层的显示效果,我们使用 CoreAnimation 框架,就从它提供的几个类和属性展开介绍。 CGAffineTransform 常用的变换如 平移 拉伸 旋转等,有一个共同的特点:原坐标系中的两条平行线,经过这类变换,仍然保持平行。于是把这类变换称为“保留平行关系的变换”,英语叫 affine transform,再翻译回来叫 仿射变换(是不是听起来高大上了)。仿射,保留了平

Eric's Blog 522

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[IOS]CoreAnimation基础[翻译6部分]

[IOS]CoreAnimation基础[翻译5部分]

HeapStackk的博客 872

9.CoreAnimation

Core Animation是直接作用在CALayer上的(并非UIView上)非常强大的跨Mac OS X和iOS平台的动画处理API,Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。CABasicAnimation(基本动画)、CAKeyframeAnimation(关键帧动画)、CAAnimationGroup(动画组)、CATransition(转场动画) ...

科技区软件类AI博主 🔍 专注 AI 工具测评 / 前沿产品深度拆解 / 行业趋势预判 🚫 拒绝科技玄学,只讲人话干货 —— 从工具使用到商业落地,搭建可复用的 AI 应用框架 74

iOS动画总结之CoreAnimation

在iOS中,图形可分为以下几个层次: 越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低;反之亦然。 一, 基于Core Animation层的基本动画实现方案。 在iOS中,展示动画可以类比于显示生活中的“拍电影”。拍电影有三大要素:演员+剧本+开拍,概念类比如下: 演员--->CALayer,规定电影的主角是谁 剧本--->CAAnimation,规定电

LXL_815520的博客 721

iOS 图形处理 翻译

原文的题目是 Designing for iOS: Graphics & Performance,   ---Begin--- 在之前的文章里,我们探讨了基于多种不同技术来实现自定义的UIButton,当然不同的技术所涉及到的代码复杂度和难度也不一样。但是我也有意提到了基于不同方法的实现所体现出的性能表现也不一一相同。   【在屏幕背后的东西】 为了了解性能

孙启超 1845

CoreAnimation核心动画

1、核心动画的简介Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。 Core Animation可以用在Mac OS X和iOS平台。Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。 要注意的是,Core Animation是直接作

唐枫专栏 460

iOS CoreAnimation系列教程

iOS Core Animation 简明系列教程  看到无数的CA教程,都非常的难懂,各种事务各种图层关系看的人头大。自己就想用通俗的语言翻译给大家听,尽可能准确表达,如果哪里有问题,请您指出我会尽快修改。 1.什么是Core Animation? 它是一套包含图形绘制,投影,动画的OC类集合。它就是一个framework。通过CoreAnimation提供的接口,你可以方

OnWay的专栏 477

ESP32嵌入式沙箱实战:MPU+WASM+权限策略三位一体防护

嵌入式系统中的‘进程沙箱’并非Linux式的虚拟内存隔离,而是受限于硬件能力的资源访问控制。ESP32因缺乏MMU仅支持MPU(内存保护单元),需结合软件层WASM运行时与细粒度权限模型,才能实现真正可用的安全边界。其核心原理在于利用MPU实现物理地址级内存围栏,通过WASM字节码的确定性执行约束指令行为,并借助属性化策略(如RAT模型)对GPIO、I2C等外设访问实施动态授权。该方案广泛应用于可编程IoT网关、边缘侧用户脚本执行、OTA安全升级等场景,尤其适合需在资源受限设备上隔离不可信逻辑的工业与消费类

weixin_34138056的博客 395

CoreAnimation基础介绍、简单使用CALayer以及多种动画效果

CoreAnimation基础介绍、简单使用CALayer以及多种动画效果 发布于:2013-05-22 15:50阅读数:5071 Core Animation可以翻译为核心动画,它为图形渲染和动画提供了基础。使用核心动画,你只需要设置一些参数比如起点和终点,剩下的帧核心动画为你自动完成。核心动画使用硬件加速,不用消耗 “” 阅读器 CoreAnimation iOS 2 转自荣

yanyusong9002的专栏 1043

IOS开发之——CABasicAnimation(95)

二 核心动画简介Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常绚丽的动画效果,而且往往是事半功倍。也就是说,使用少量代码就可以实现非常强大的功能Core Animation可以用在Mac OS和IOS平台Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程要注意的是,Core Animation是直接作用在CALayer上的,并非UIView如果是xcode5之前的版本,使用它需要添加QuartzCore.framework和引入对

2401_84415708的博客 978
上一篇: [IOS]CoreAnimation基础[翻译1部分]
下一篇: [IOS]CoreAnimation基础[翻译3部分]
HeapStackk
博客等级 码龄12年 11粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值