目次
1. はじめに
2. コア アニメーション クラスの図と共通フィールド
<code class="hljs avrasm has-numbering">    _demoView<span class="hljs-preprocessor">.frame</span> = CGRectMake(<span class="hljs-number">0</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">50</span>)<span class="hljs-comment">;</span>    [UIView animateWithDuration:<span class="hljs-number">1.0</span>f animations:^{        _demoView<span class="hljs-preprocessor">.frame</span> = CGRectMake(SCREEN_WIDTH, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">50</span>)<span class="hljs-comment">;</span>    } completion:^(BOOL finished) {        _demoView<span class="hljs-preprocessor">.frame</span> = CGRectMake(SCREEN_WIDTH/<span class="hljs-number">2</span>-<span class="hljs-number">25</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">50</span>)<span class="hljs-comment">;</span>    }]<span class="hljs-comment">;</span></code>
ログイン後にコピー
" >
<code class="hljs avrasm has-numbering">    _demoView<span class="hljs-preprocessor">.frame</span> = CGRectMake(<span class="hljs-number">0</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">50</span>)<span class="hljs-comment">;</span>    [UIView animateWithDuration:<span class="hljs-number">1.0</span>f animations:^{        _demoView<span class="hljs-preprocessor">.frame</span> = CGRectMake(SCREEN_WIDTH, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">50</span>)<span class="hljs-comment">;</span>    } completion:^(BOOL finished) {        _demoView<span class="hljs-preprocessor">.frame</span> = CGRectMake(SCREEN_WIDTH/<span class="hljs-number">2</span>-<span class="hljs-number">25</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">50</span>)<span class="hljs-comment">;</span>    }]<span class="hljs-comment">;</span></code>
ログイン後にコピー
_demoView.frame = CGRectMake(0, SCREEN_HEIGHT/2-50, 50, 50);[UIView beginAnimations:nil context:nil];[UIView setAnimationDuration:1.0f];_demoView.frame = CGRectMake(SCREEN_WIDTH, SCREEN_HEIGHT/2-50, 50, 50);[UIView commitAnimations];
ログイン後にコピー
" >
_demoView.frame = CGRectMake(0, SCREEN_HEIGHT/2-50, 50, 50);[UIView beginAnimations:nil context:nil];[UIView setAnimationDuration:1.0f];_demoView.frame = CGRectMake(SCREEN_WIDTH, SCREEN_HEIGHT/2-50, 50, 50);[UIView commitAnimations];
ログイン後にコピー
<code class="hljs avrasm has-numbering">    CABasicAnimation *anima = [CABasicAnimation animationWithKeyPath:@<span class="hljs-string">"position"</span>]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.fromValue</span> = [NSValue valueWithCGPoint:CGPointMake(<span class="hljs-number">0</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">75</span>)]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.toValue</span> = [NSValue valueWithCGPoint:CGPointMake(SCREEN_WIDTH, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">75</span>)]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.duration</span> = <span class="hljs-number">1.0</span>f<span class="hljs-comment">;</span>    [_demoView<span class="hljs-preprocessor">.layer</span> addAnimation:anima forKey:@<span class="hljs-string">"positionAnimation"</span>]<span class="hljs-comment">;</span></code>
ログイン後にコピー
" >
<code class="hljs avrasm has-numbering">    CABasicAnimation *anima = [CABasicAnimation animationWithKeyPath:@<span class="hljs-string">"position"</span>]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.fromValue</span> = [NSValue valueWithCGPoint:CGPointMake(<span class="hljs-number">0</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">75</span>)]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.toValue</span> = [NSValue valueWithCGPoint:CGPointMake(SCREEN_WIDTH, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">75</span>)]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.duration</span> = <span class="hljs-number">1.0</span>f<span class="hljs-comment">;</span>    [_demoView<span class="hljs-preprocessor">.layer</span> addAnimation:anima forKey:@<span class="hljs-string">"positionAnimation"</span>]<span class="hljs-comment">;</span></code>
ログイン後にコピー
4.4:过渡动画(CATransition)
4.5:综合案例
4.5.1 : 仿Path菜单效果
4.5.2: 仿钉钉菜单效果
4.5.3: 点赞烟花效果动画
五、总结
六、下载地址
ホームページ ウェブフロントエンド htmlチュートリアル IOSアニメーション(CoreAnimation)まとめ(複数記事参照)_html/css_WEB-ITnose

IOSアニメーション(CoreAnimation)まとめ(複数記事参照)_html/css_WEB-ITnose

Jun 24, 2016 am 11:16 AM

1. はじめに

iOS アニメーションは主に Core Animation フレームワークを指します。公式ドキュメントのアドレスは次のとおりです: Core Animation Guide。
CoreAnimation は、IOS および OS X プラットフォームでのグラフィックスのレンダリングとアニメーションを担当する基本的なフレームワークです。 Core Animation はアニメーション ビューやその他の視覚要素と連携して、アニメーションに必要なフレーム描画作業のほとんどを完了できます。 Core Animation のアニメーション効果を使用するには、いくつかのアニメーション パラメータ (開始点の位置や終了点の位置など) を設定するだけで済みます。 Core Animation は、実際の描画タスクのほとんどをグラフィックス ハードウェアに引き渡し、グラフィックスのレンダリングを高速化します。この自動グラフィックス アクセラレーション テクノロジにより、CPU への負担を増やしたり、プログラムの実行速度に影響を与えたりすることなく、アニメーションのフレーム レートが向上し、表示効果がよりスムーズになります。

2. コア アニメーション クラスの図と共通フィールド

コア アニメーション クラスの継承図

共通プロパティ
duration: アニメーションの継続時間
beginTime: アニメーションの開始時間
repeatCount: 繰り返しの数アニメーションの自動反転: 実行されたアニメーションは、元のアニメーションに従って実行に戻ります。
timingFunction: アニメーションの表示リズムを制御するシステムには、次の 5 つの値のオプションがあります:

kCAMediaTimingFunctionLinear リニア アニメーション
  • kCAMediaTimingFunctionEaseIn次に高速 (スローインと高速アウト)
  • kCAMediaTimingFunctionEaseOut ブロックが最初に低速 (高速インと低速アウト)
  • kCAMediaTimingFunctionEaseInEaseOut 最初は低速、次に高速、その後低速
  • kCAMediaTimingFunctionDefault デフォルト、中間も高速化
  • デリゲート: アニメーション プロキシ。アニメーションの実行と終了を検出する機能。

    <code class="hljs objectivec has-numbering"><span class="hljs-class"><span class="hljs-keyword">@interface</span> <span class="hljs-title">NSObject</span> (<span class="hljs-title">CAAnimationDelegate</span>)</span> - (<span class="hljs-keyword">void</span>)animationDidStart:(CAAnimation *)anim; - (<span class="hljs-keyword">void</span>)animationDidStop:(CAAnimation *)anim finished:(<span class="hljs-built_in">BOOL</span>)flag;<span class="hljs-keyword">@end</span></code>
    ログイン後にコピー
    path: キーフレーム アニメーションの実行パス

    type: トランジション アニメーションのアニメーション タイプ システムは 4 つのトランジション アニメーションを提供します。
    - kCATransitionFade グラデーション効果
    - kCATransitionMoveIn オーバーレイ効果に入る
    - kCATransitionPush プッシュアウト効果
    - kCATransitionReveal 離脱効果を明らかにする
    サブタイプ: トランジションアニメーションのアニメーション方向
    - kCATransitionFromRight 右から入る
    - kCATransitionFromLeft 左から入る
    - kCATransitionFromTop から入る上
    - kCATransitionFromBottom 下から入ります

    3つ目: IOSアニメーションの呼び出し方

    1つ目: UIViewコードブロック呼び出し

    <code class="hljs avrasm has-numbering">    _demoView<span class="hljs-preprocessor">.frame</span> = CGRectMake(<span class="hljs-number">0</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">50</span>)<span class="hljs-comment">;</span>    [UIView animateWithDuration:<span class="hljs-number">1.0</span>f animations:^{        _demoView<span class="hljs-preprocessor">.frame</span> = CGRectMake(SCREEN_WIDTH, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">50</span>)<span class="hljs-comment">;</span>    } completion:^(BOOL finished) {        _demoView<span class="hljs-preprocessor">.frame</span> = CGRectMake(SCREEN_WIDTH/<span class="hljs-number">2</span>-<span class="hljs-number">25</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">50</span>)<span class="hljs-comment">;</span>    }]<span class="hljs-comment">;</span></code>
    ログイン後にコピー

    2つ目: UIView [begin commit]モード

    _demoView.frame = CGRectMake(0, SCREEN_HEIGHT/2-50, 50, 50);[UIView beginAnimations:nil context:nil];[UIView setAnimationDuration:1.0f];_demoView.frame = CGRectMake(SCREEN_WIDTH, SCREEN_HEIGHT/2-50, 50, 50);[UIView commitAnimations];
    ログイン後にコピー

    3つ目: Coreを使用するアニメーションクラス

    <code class="hljs avrasm has-numbering">    CABasicAnimation *anima = [CABasicAnimation animationWithKeyPath:@<span class="hljs-string">"position"</span>]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.fromValue</span> = [NSValue valueWithCGPoint:CGPointMake(<span class="hljs-number">0</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">75</span>)]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.toValue</span> = [NSValue valueWithCGPoint:CGPointMake(SCREEN_WIDTH, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">75</span>)]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.duration</span> = <span class="hljs-number">1.0</span>f<span class="hljs-comment">;</span>    [_demoView<span class="hljs-preprocessor">.layer</span> addAnimation:anima forKey:@<span class="hljs-string">"positionAnimation"</span>]<span class="hljs-comment">;</span></code>
    ログイン後にコピー

    4. IOS アニメーションの使用

    4.1: 基本アニメーション (CABaseAnimation)

    重要な属性 fromValue
    : keyPath に対応する初期値

    toValue: keyPath に対応する終了値
    基本的なアニメーションは主に提供されますCALayer オブジェクトの変数プロパティに対して簡単なアニメーション操作を実行します。例: 変位、透明度、スケーリング、回転、背景色など。
    エフェクトのデモ:

    ディスプレイスメントアニメーションコードのデモ:

    <code class="hljs avrasm has-numbering">    //使用CABasicAnimation创建基础动画    CABasicAnimation *anima = [CABasicAnimation animationWithKeyPath:@<span class="hljs-string">"position"</span>]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.fromValue</span> = [NSValue valueWithCGPoint:CGPointMake(<span class="hljs-number">0</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">75</span>)]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.toValue</span> = [NSValue valueWithCGPoint:CGPointMake(SCREEN_WIDTH, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">75</span>)]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.duration</span> = <span class="hljs-number">1.0</span>f<span class="hljs-comment">;</span>    //anima<span class="hljs-preprocessor">.fillMode</span> = kCAFillModeForwards<span class="hljs-comment">;</span>    //anima<span class="hljs-preprocessor">.removedOnCompletion</span> = NO<span class="hljs-comment">;</span>    [_demoView<span class="hljs-preprocessor">.layer</span> addAnimation:anima forKey:@<span class="hljs-string">"positionAnimation"</span>]<span class="hljs-comment">;</span></code>
    ログイン後にコピー

    Notes fillMode=kCAFillModeForwardsおよびremovedOnComletion=NOの場合、アニメーションの実行後、レイヤーはアニメーションの実行後の状態を表示し続けます。しかし本質的には、レイヤーのプロパティ値はアニメーションが実行される前の初期値のままであり、実際には変更されていません。

    4.2: キーフレーム アニメーション (CAKeyframeAnimation)

    CAKeyframeAnimation と CABaseAnimation は両方とも CAPropertyAnimatin のサブクラスに属します。 CABaseAnimation は 1 つの値 (fromValue) から別の値 (toValue) に変換することしかできませんが、CAKeyframeAnimation は NSArray を使用してキーフレームのセットを保存します。


    重要な属性
    : 上記の NSArray オブジェクトです。内部の要素は「キーフレーム」と呼ばれます。アニメーション オブジェクトは、指定された時間 (継続時間) 内で値配列内の各キーフレームを順番に表示します。

    path: CGPathRefCGMutablePathRef を設定して、レイヤーをパスに沿って移動させることができます。 path は CALayer のアンカーポイントと位置でのみ機能します。パスを設定した場合、値は無視されます。
    keyTimes: 対応するキーフレームの対応する時点を指定でき、その値の範囲は 0 ~ 1.0 です。 keyTimes が設定されていない場合、各キーフレーム時間は分割されます。同様に。
    効果のデモ:

    循環パスアニメーションコードのデモ:

    <code class="hljs avrasm has-numbering">    CAKeyframeAnimation *anima = [CAKeyframeAnimation animationWithKeyPath:@<span class="hljs-string">"position"</span>]<span class="hljs-comment">;</span>    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(SCREEN_WIDTH/<span class="hljs-number">2</span>-<span class="hljs-number">100</span>, SCREEN_HEIGHT/<span class="hljs-number">2</span>-<span class="hljs-number">100</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>)]<span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.path</span> = path<span class="hljs-preprocessor">.CGPath</span><span class="hljs-comment">;</span>    anima<span class="hljs-preprocessor">.duration</span> = <span class="hljs-number">2.0</span>f<span class="hljs-comment">;</span>    [_demoView<span class="hljs-preprocessor">.layer</span> addAnimation:anima forKey:@<span class="hljs-string">"pathAnimation"</span>]<span class="hljs-comment">;</span></code>
    ログイン後にコピー

    説明: CABasicAnimation は、最大 2 つのキーフレームを持つ CAKeyframeAnimation とみなすことができます

    4.3: グループアニメーション (CAAnimationGroup)

    CAAnimation のサブクラス、あなたアニメーション オブジェクトのグループを保存できます。 CAAnimationGroup オブジェクトをレイヤーに追加すると、グループ内のすべてのアニメーション オブジェクトを同時に実行できます。


    重要な属性 アニメーション
    : アニメーション オブジェクトのグループを保存するために使用される NSArray
    効果のデモ:

    グループ アニメーション コードのデモ:

    <code class="hljs perl has-numbering">    CAKeyframeAnimation <span class="hljs-variable">*anima1</span> = [CAKeyframeAnimation animationWithKeyPath:<span class="hljs-variable">@"</span>position<span class="hljs-string">"];    NSValue <span class="hljs-variable">*value0</span> = [NSValue valueWithCGPoint:CGPointMake(0, SCREEN_HEIGHT/2-50)];    NSValue <span class="hljs-variable">*value1</span> = [NSValue valueWithCGPoint:CGPointMake(SCREEN_WIDTH/3, SCREEN_HEIGHT/2-50)];    NSValue <span class="hljs-variable">*value2</span> = [NSValue valueWithCGPoint:CGPointMake(SCREEN_WIDTH/3, SCREEN_HEIGHT/2+50)];    NSValue <span class="hljs-variable">*value3</span> = [NSValue valueWithCGPoint:CGPointMake(SCREEN_WIDTH<span class="hljs-variable">*2</span>/3, SCREEN_HEIGHT/2+50)];    NSValue <span class="hljs-variable">*value4</span> = [NSValue valueWithCGPoint:CGPointMake(SCREEN_WIDTH<span class="hljs-variable">*2</span>/3, SCREEN_HEIGHT/2-50)];    NSValue <span class="hljs-variable">*value5</span> = [NSValue valueWithCGPoint:CGPointMake(SCREEN_WIDTH, SCREEN_HEIGHT/2-50)];    anima1.values = [NSArray arrayWithObjects:value0,value1,value2,value3,value4,value5, nil];    //缩放动画    CABasicAnimation <span class="hljs-variable">*anima2</span> = [CABasicAnimation animationWithKeyPath:<span class="hljs-variable">@"</span>transform.scale"</span>];    anima2.fromValue = [NSNumber numberWithFloat:<span class="hljs-number">0</span>.<span class="hljs-number">8</span>f];    anima2.toValue = [NSNumber numberWithFloat:<span class="hljs-number">2.0</span>f];    <span class="hljs-regexp">//</span>旋转动画    CABasicAnimation <span class="hljs-variable">*anima3</span> = [CABasicAnimation animationWithKeyPath:<span class="hljs-variable">@"</span>transform.rotation<span class="hljs-string">"];    anima3.toValue = [NSNumber numberWithFloat:M_PI<span class="hljs-variable">*4</span>];    //组动画    CAAnimationGroup <span class="hljs-variable">*groupAnimation</span> = [CAAnimationGroup animation];    groupAnimation.animations = [NSArray arrayWithObjects:anima1,anima2,anima3, nil];    groupAnimation.duration = 4.0f;    [_demoView.layer addAnimation:groupAnimation forKey:<span class="hljs-variable">@"</span>groupAnimation"</span>];</code>
    ログイン後にコピー

    4.4:过渡动画(CATransition)

    CAAnimation的子类,用于做过渡动画或者转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。
    重要属性
    type
    :动画过渡类型

    Apple 官方的SDK其实只提供了四种过渡效果。
    - kCATransitionFade 渐变效果
    - kCATransitionMoveIn 进入覆盖效果
    - kCATransitionPush 推出效果
    - kCATransitionReveal 揭露离开效果
    私有API提供了其他很多非常炫的过渡动画,比如@”cube”、@”suckEffect”、@”oglFlip”、 @”rippleEffect”、@”pageCurl”、@”pageUnCurl”、@”cameraIrisHollowOpen”、@”cameraIrisHollowClose”等。
    注意点
    私有api,不建议开发者们使用。因为苹果公司不提供维护,并且有可能造成你的app审核不通过。

    subtype:动画过渡方向

  • kCATransitionFromRight 从右侧进入
  • kCATransitionFromLeft 从左侧进入
  • kCATransitionFromTop 从顶部进入
  • kCATransitionFromBottom 从底部进入
  • startProgress:动画起点(在整体动画的百分比)
    endProgress:动画终点(在整体动画的百分比)

    效果演示:

    4.5:综合案例

    4.5.1 : 仿Path菜单效果

    效果演示:

    动画解析:
    1、点击红色按钮,红色按钮旋转。(旋转动画)
    2、黑色小按钮依次弹出,并且带有旋转效果。(位移动画、旋转动画、组动画)
    3、点击黑色小按钮,其他按钮消失,被点击的黑色按钮变大变淡消失。(缩放动画、alpha动画、组动画)
    博主的话:代码过多,这里不做演示。文章最后提供代码下载地址。

    4.5.2: 仿钉钉菜单效果

    效果演示:

    看上去挺炫的,其实实现很简单,就是位移动画+缩放动画。

    4.5.3: 点赞烟花效果动画

    效果演示:


    这里其实只有按钮变大效果使用的缩放动画。烟花效果 使用的是一种比较特殊的动画–粒子动画。
    一个粒子系统一般有两部分组成:
    1、CAEmitterCell:可以看作是单个粒子的原型(例如,一个单一的粉扑在一团烟雾)。当散发出一个粒子,UIKit根据这个发射粒子和定义的基础上创建一个随机粒子。此原型包括一些属性来控制粒子的图片,颜色,方向,运动,缩放比例和生命周期。
    2、CAEmitterLayer:主要控制发射源的位置、尺寸、发射模式、发射源的形状等等。
    以上两个类的属性还是比较多的,这里就不细讲了。大家可以google一下,详细的了解吧。

    五、总结

    任何复杂的动画其实都是由一个个简单的动画组装而成的,只要我们善于分解和组装,我们就能实现出满意的效果。动画其实也不是那么难。

    六、下载地址

    github下载地址:https://github.com/yixiangboy/IOSAnimationDemo
    github:https://github.com/yixiangboy


    iOS动画效果与上文相互结合:

    理论 UIview VS UIlayer

    UIView只是CALyer之上的封装,更准确的来说,UIView是CALyer的简版封装,加上事件处理的集合类。 CALayer是QuartzCore库内的类,是iOS上最基本的绘制单元。其次,我们知道iOS平台的Cocoa Touch 是源于OS X平台的Cocoa),是在Cocoa的基础上添加了适用于移动手机设备的手势识别、动画等特性;但从底层实现上来说,Cocoa Touch与Cocoa共用一套底层的库,其中就包括了QuartCore.framework;但QuartCore.framework一开始就是为OS X设计的,所以其中有部分特性是不适合做移动设备开发的,比如最重要的坐标系统。因此,我们也就不难理解为何UIView/NSView在CALayer上做了一层封装。

    基于UIView实现的动画

    简单的Block动画

    UIView

    弹性动画

    关键帧动画(中间可以添加合适多的帧来做不同的衔接动画)

    CALayer动画

    常用属性 

    duration : 动画的持续时间

    beginTime : 动画的开始时间 

    repeatCount : 动画的重复次数 

    autoreverses : 执行的动画按照原动画返回执行 

    timingFunction : 控制动画的显示节奏,系统提供五种值选择, 分别是 

  • kCAMediaTimingFunctionLinear 线性动画

  • kCAMediaTimingFunctionEaseIn 先慢后快(慢进快出)

  • kCAMediaTimingFunctionEaseOut 最初にブロックし、次に低速 (高速イン、低速アウト)

  • kCAMediaTimingFunctionEaseInEaseOut 最初にブロックし、次に高速、次に低速

  • kCAMediaTimingFunctionDefault デフォルト、中間でも高速です

  • パス: キーフレームアニメーションの実行パス

    type: トランジション アニメーションのアニメーション タイプ。システムは次の 4 つのトランジション アニメーションを提供します。 ionRe veal は離脱効果を明らかにします


    subtype: トランジションアニメーションのアニメーション方向
  • kCATransitionFromRight 右から入力
  • kCATransitionFromLeft 左から入力
  • kCATransitionFromTop 上から入力
  • kCATransitionFromBottom 下から入力
  • 基本アニメーションは主にCALayerを提供しますオブジェクトの変数プロパティに対して簡単なアニメーション操作を実行します。例: 変位、透明度、スケーリング、回転、背景色など。 重要な属性: fromValue: keyPath に対応する初期値 toValue: keyPath に対応する終了値。
  • 基本アニメーション (CABaseAnimation) 0:1 1:0 ドロップダウン シアー ヘッドの展開と折りたたみを実現します
  • キーフレーム アニメーション (CAKeyframeAnimation) CAKeyframeAnimation と CABaseAnimation は両方とも CAPropertyAnimatin のサブクラスに属します。 CABaseAnimation は 1 つの値 (fromValue) から別の値 (toValue) に変換することしかできませんが、CAKeyframeAnimation は NSArray を使用してキーフレームのセットを保存します。 重要な属性値: これは、上記の NSArray オブジェクトです。内部の要素は「キーフレーム」と呼ばれます。アニメーション オブジェクトは、指定された時間 (継続時間) パス内で値配列内の各キーフレームを順番に表示します。 CGPathRefCGMutablePathRef を設定して、レイヤーがパスに沿って移動できるようにすることができます。 path は CALayer のアンカーポイントと位置でのみ機能します。パスを設定した場合、値は無視されます。 keyTimes: 値の範囲は 0 ~ 1.0 で、対応するキー フレームの対応する時点を指定できます。 keyTimes が設定されていない場合、各キー フレームの値は分割されます。同様に。

  • 結合アニメーション:

  • Transition アニメーション (CATransition) プライベート API のほとんどは、使用後に起動できません。 プライベート API は、@"cube"、@"suckEffect"、@"oglFlip"、@"rippleEffect"、@"pageCurl"、@"pageUnCurl"、@"cameraIrisHollowOpen"、@" など、他にも多くの非常にクールなトランジション アニメーションを提供します。カメラIrisHollowClose」など。

  • パーティクル アニメーション

  • 変形アニメーション

  • 変形は、回転、変形、平行移動などの操作を完了する、マトリックス変形のレベルでビューの表示効果を変更する非常に重要な属性です。変更すると、実際にはビューのフレームが変更されます。変換を表すために使用されるデータ型は 2 つあり、CGAffineTransform と CATransform3D です。前者は UIView に作用し、後者はレイヤーレベルの変換タイプです。後者に基づいて、より強力な機能を実現できます。 マトリックス変換がどのように実装されるかを理解したい場合は、このブログを参照してください: CGAffineTransform 放射状変換
  • アニメーションを実装するために変換を使用する前に、一般的に使用される関数をいくつか紹介します:

  • 厳密に言えば、transform です。アニメーションではありませんが、UIView アニメーションと CALayer アニメーションの両方に表示されるため、アニメーション内の操作の一部として言及しました。
  • 一部のアプリケーション
  • 上記の CALayer 基本アニメーション コードを使用して、ドロップダウン シアー ヘッドの拡大と縮小、および時計の針の回転を実現します

    入力ボックスの入力時の揺れ効果エラー情報。

    アニメーションの読み込みは、CAShapeLayer と CABasicAnimation を使用して実現できます。

    iOS レンダリング ビューの階層図:

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    &lt; Progress&gt;の目的は何ですか 要素? &lt; Progress&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

    この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

    &lt; datalist&gt;の目的は何ですか 要素? &lt; datalist&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

    この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

    HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

    記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

    &lt; meter&gt;の目的は何ですか 要素? &lt; meter&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

    この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

    HTML5&lt; time&gt;を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? HTML5&lt; time&gt;を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? Mar 12, 2025 pm 04:05 PM

    この記事では、html5&lt; time&gt;について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

    HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

    この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

    ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

    この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

    &lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? &lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

    この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

    See all articles