CALayerアニメーション実践①:アプリケーションをもっと柔軟に! _html/css_WEB-ITnose
この記事では、2 つの読み込みアニメーションを通して CALayer アニメーションを紹介します。オブジェクト指向の考え方によれば、Layer は実際にはモデル クラスであり、Java の POJO クラスと同様に、いくつかの属性が含まれており、これらの属性が Layer に表示されるコンテンツに影響を与えるメソッドはありません。まず、UIView と CALayer の違いと関係を見てみましょう。
連絡先: レイヤーはビューの後ろにいる女性です。各 UIView の背後には、対応する CALayer があります。UIView に表示されるコンテンツは、実際には CALayer 内にあります。
の違い:
View には、さまざまな組み合わせによる複雑なレイアウト メカニズムがあります。レイヤーは非常にシンプルなレイアウトのみです。
View はユーザーの操作に応答できます。レイヤーはユーザーの操作に応答できません。
View の描画ロジックは CPU によって実行されます。 Layer でのペイントは GPU によって直接実行されます。
View には豊富で強力なサブクラスがあります。 Layer にはサブクラスがいくつかしかありません。
View にはアニメーション属性が少なく、制限が増えています。 Layer は下位レベルであり、より多くのアニメーション属性を持っているため、より柔軟で豊かなアニメーションを実現できます。
初めての CALayer アニメーション
レイヤーアニメーションシリーズの記事では、簡単な知識から複雑な知識まで体系的な説明は用意しません。サンプルで使用される知識のポイントについて、さまざまな実践例を使用して説明します。
最初のアニメーションでは、Google Chrome ブラウザーの読み込み時にタブに待機アニメーションを実装しましょう:
新しいプロジェクト GoogleLoading、Main.storyboard を開き、UIView を ViewController にドラッグし、制約を追加し、 ViewController と UIView の背景色を自分で設定します。 ここでは、UIView の背景色を無色に設定します。
次に、ViewController に View の Outlet を追加します。この UIView は、読み込みアニメーションを表示する View です。 cpp]
plaincopy を表示@IBOutletweak varloadingView: UIView!
[cpp]
plain copy を表示let ovalShapeLayer: CAShapeLayer = CAShapeLayer()
- ストローク開始: ストロークの開始位置。
- ストロークEnd: ストロークの終了位置。
- fillColor: グラフィックの塗りつぶしの色。
- lineWidth: ストロークの幅、つまりストロークの太さ。
- lineDashPattern: 破線パターン。
- path: グラフィックのパス。
- lineCap: ストロークの閉じられていない位置の形状。
-
[cpp]
view plaincopyovalShapeLayer.strokingColor = UIColor.whiteColor().CGColor
- ovalShapeLayer.fillColor =色() .CGColor
- ovalShapeLayer.lineWidth = 7
-
ここに新しい顔、UIBezierPath が登場します。これはベクトルベースのパスを作成でき、Core Graphics フレームワークによるパスのカプセル化です。 UIBezierPath は、楕円、長方形、または複数の直線と曲線セグメントで構成される形状などの単純な形状パスを定義できます。ここでは、初期化メソッド init(ovalInRect rect: CGRect) を使用して、完全な円のパスを定義する必要があります。パスを設定した後、ovalShapeLayerをloadingViewビューのLayerに追加すると、設定されたパスに従ってloadingViewにグラフィックを描画できます:
[cpp] view plaincopy
loadingView.layer( ovalShapeLayer)
コンパイルして実行して効果を確認します:
完全な円。次に行う必要があるのは、この円の一部のみを表示するようにすることです。これは、Google の読み込みアニメーションには円形の輪郭の約 5 分の 2 しか含まれていないためです。引き続き viewDidLoad() メソッドに注目し、loadingView.layer.addSublayer(ovalShapeLayer) コード行の上に別のコード行を追加します。 0.4
上記のコードは、ovalShapeLayer のストロークEnd プロパティを 0.4 に設定します。これは、円を描画するときに、ovalShapeLayer は円全体の 5 分の 2 のみを描画します。つまり、ストロークは円全体の 5 分の 1 で終了することを意味します。円の輪郭が 2 か所あります。コンパイルして実行して効果を確認します。
- これは希望どおりの効果のようですが、改善する必要がある詳細が 1 つあります。Google の読み込みアニメーションを見てください。円形の輪郭の青い部分が丸くなっています。丸い輪郭の両端は四角形です。この問題は簡単に解決できます。次のコード行を、loadingView.layer.addSublayer(ovalShapeLayer) 行の上に追加します。
このコード行は、ストロークの両端の形状を円に設定することを意味します。対応する 2 つの定数 kCALineCapButt と kCALineCapSquare も試してみることができます。もう一度コンパイルして実行して、効果を確認します。
ここまで、CALayer を使用してアニメーションの本体を描画しました。次に、それを動かす必要があります。 ViewController.swift に beginSimpleAnimate() メソッドを追加します。
[cpp] view plaincopy
func beginSimpleAnimation() {
-
letrotate = CABas icAnimation(keyPath: " ")
rotate.re petoCount = HUGE
- loadingView.layer.addAnimation(rotate, forKey: nil)
- }
- このメソッドでは、新しいフェイス CABasicAnimation が表示されます。このクラスは、animationWithKeyPath: 初期化メソッドを通じて、CAPropertyAnimation に基づいてさまざまなアニメーションを作成します。実例。一般的に使用される keyPath には次のものがあります:
- transform.rotation: 回転アニメーション。
- transform.ratation.x: アニメーションを x 軸で回転します。
- transform.ratation.y: アニメーションを y 軸で回転します。
- transform.ratation.z: アニメーションを Z 軸で回転します。
- transform.scale: アニメーションを比例的に拡大および縮小します。
- transform.scale.y: アニメーションを Y 軸に比例して拡大および縮小します。
- transform.scale.z: アニメーションを Z 軸に比例してスケールします。
- position: 位置を移動するアニメーション。
- 不透明度: 透明度のアニメーション。
- 上記は、一般的に使用されるアニメーション キーパスのほんの一部です。実際のアプリケーションでさらに詳しく調べていただければ幸いです。 beginSimpleAnimation() メソッドでは、transform.rotation を使用して回転アニメーションのインスタンスを作成し、アニメーションの 4 つのプロパティを設定します:
- duration: アニメーションの継続時間。
- fromValue: アニメーションの開始値。
- toValue: アニメーション終了値。
- repeatCount: 繰り返しの数。
このメソッドでこれらの属性を設定する意味は、アニメーション本体を連続的に回転させることであり、1 回転の時間は 1.5 秒です。上記の概念は UIView アニメーションにも存在しており、誰もがよく知っているはずです。次に、Layer の addAnimation(anim: CAAnimation, forKey key: String?) メソッドを使用して、回転アニメーション インスタンスをターゲット Layer に追加します。このメソッドのキーは、後で再利用するときに簡単に取得できるように、追加されたアニメーションをマークするために使用されます。値 nil を渡す必要はありません。最後に、beginSimpleAnimation() メソッドが viewWillAppear メソッド内で呼び出されます。
[cpp] view plaincopy
override func viewWillAppear(animated: Bool) {
beginSimpleAnimation ()
}
コンパイルして実行して効果を確認します。
これで、最初の単純な CALayer アニメーションが完成しました。次のセクションでは、新しいアニメーション タイプとアニメーションの組み合わせを紹介するために、より興味深い読み込みアニメーションを実装します。
ストローク アニメーションとアニメーション グループ
最初に達成される効果を見てみましょう:
この種の読み込みアニメーションは、NetEase News や Win バージョンの Google Chrome など、多くのアプリケーションに登場しています。まず、Main.storyboard を開き、新しい UIView を追加し、ViewController.swift に Outlet を追加します。次に、新しい CAShapeLayer を定義します。 anotherOvalShapeLayer: CAShapeLayer = CAShapeLayer()
それを viewDidLoad() メソッドに設定し、先ほど作成した complexLoadingView に追加します:
[cpp] プレーン コピーを表示
- an otherOvalShapeLayer.ストロークカラー = UIColor.whiteColor().CGColor
anotherOvalLayer.line width = 7
- anotherOvalRadius = complexLoadingView.frame.size にします.height/2 * 0.8
- anotherOvalShapeLayer.path = UIBezierPath(ovalInRect: CGRect(x: complexLoadingView.frame.size.width/2 - anotherOvalRadius, y: complexLoadingView.frame.size.height/2 - anotherOvalRadius, width: anotherOvalRadius * 2、高さ: anotherOvalRadius * 2)).CGPath
- anotherOvalShapeLayer.lineCap = kCALineCapRound
- complexLoadingView.layer.addSublayer(anotherOvalShapeLayer)
-
-
-
[cpp]
view plaincopy -
ストロークStartAnimate.toValue = 1
let ストロークEndAnimate = CABasicAnimation(keyPath: "ストロークエンド")
ストロークEndAnimate.fromValue = 0.0
ストロークEndAnimate.toValue = 1
-
let ストロークAnimateGroup = CAAnimationGroup()
ストロークAnimateGroup.duration = 1.5
ストロークAnimateGroup.repeatCount = 巨大です
ストロークAnimateGroup.animations = [ストロークStartAnimate, ストロークEndAnimate]
anotherOvalShapeLayer.addAnimation(ストロークAnimateGroup, forKey: nil)
-
ここではストローク開始アニメーションとストローク終了アニメーションという2つの新しいアニメーションタイプがありますが、CAShapeレイヤー描画を使用していますが、円が描画されます。 、ストロークの開始位置とストロークの終了位置もありますが、それらは同じ位置にあります。ストローク アニメーションの位置の値は 0 ~ 1 であり、0 は描画パスの開始位置を表し、1 は描画パスの位置を表します。描画されたパスの終了位置。
したがって、ストロークの開始位置を –0.5 から開始するストロークの開始位置を –0.5 から開始するストロークの開始位置をアニメーションに設定します。つまり、ストロークの描画が開始されるまで待機することです。描画。ストロークEndAnimateアニメーションでは、ストロークの終了位置を0から1まで通常通り円を描くことができます。このようにストロークの両端の描画時間が異なり、時間差が生じることで、連続的に円を描いたり消したりする効果が得られます。
ストロークStartAnimate とストロークEndAnimate は 2 つのアニメーションであり、レイヤー上でどのように動作しますか?このとき、CAAnimationGroup を使用します。名前のとおり、複数のアニメーションを 1 つのグループにまとめ、サブアニメーションを同時に実行します。アニメーション グループでは、アニメーションの継続時間、繰り返しの数、およびサブアニメーションの配列を設定できます。最後に、アニメーション グループをレイヤーに追加します。
最後に、viewWillAppear() メソッドで beginComplexAnimation() メソッドを呼び出します:
[cpp] view plaincopy
override func viewWillAppear(animated: Bool) {
-
beginS impleAnimation()
-
beginComplexAnimation()
}
コンパイルして実行して効果を確認します:
概要
CALayer アニメーションは、UIView アニメーションよりもリッチで、低レベルで、より効率的なアニメーションを実現できます。ただし、実際のアプリケーション開発では、UIView アニメーションが使用できる場合は、CALayer アニメーションは必要ありません。この記事は、CALayer アニメーションの概要を説明するものであり、CALayer アニメーションについての予備的な理解を提供します。後で、この記事でさらに多くの例を使用して、CALayer アニメーションをより深く理解し、それによって独自のアプリケーションのユーザー エクスペリエンスを向上させます。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

GiteEpages静的Webサイトの展開が失敗しました:404エラーのトラブルシューティングと解像度Giteeを使用する
