UIImageViewを他の色のアニメーションで塗りつぶします

user1007522

イメージビューがあり、そのイメージビューをカラーでアニメーション化したいと思います。したがって、私の画像は最初は緑色の画像で、次にオレンジ色の画像にアニメーション化します。

これは私のコードです:

class TestView: UIView {

    func startAnimate(){

        let size:CGSize = self.bounds.size

        let layer = UIImageView(image: UIImage(named: "LaunchIcon"))
        layer.frame = self.bounds

        let initialRect:CGRect = CGRect.init(x: 0, y: size.height, width: size.width, height: 0)
        let finalRect:CGRect = CGRect.init(x: 0, y: size.height, width: size.width, height: size.height)

        let sublayer = CALayer()
        sublayer.frame = initialRect
        sublayer.backgroundColor = UIColor.orange.cgColor
        sublayer.opacity = 0.5


        let mask:CAShapeLayer = CAShapeLayer()
        mask.frame = self.bounds
        mask.path = UIBezierPath(rect: self.bounds).cgPath
        mask.fillColor = UIColor.black.cgColor

        layer.layer.addSublayer(sublayer)
        layer.layer.mask = mask

        self.layer.addSublayer(layer.layer)

        let boundsAnim:CABasicAnimation  = CABasicAnimation(keyPath: "bounds")
        boundsAnim.toValue = NSValue.init(cgRect:finalRect)

        let animationGroup = CAAnimationGroup()
        animationGroup.animations = [boundsAnim]
        animationGroup.isRemovedOnCompletion = false
        animationGroup.duration = 2
        animationGroup.fillMode = kCAFillModeForwards

        sublayer.add(animationGroup, forKey: nil)
    }
}

私の結果:

ここに画像の説明を入力してください

最初の問題は、オレンジが私の画像だけでなくフレーム全体を撮影していることです。2番目の問題は、それが一番上まで満たされないことです。

alexburtnik

コードに関する問題のいくつか:

  1. maskレイヤーに長方形追加しますが、レンダリングにはまったく影響しません。フレーム、位置、形などを変更することは決してないので、その目的は明確ではありません。

  2. sublayerガラスの形の中にしか見えないはずですよね?ただし、コードでは、これを長方形として定義し、サブビューであるため、ガラス画像の形状によってトリミングされる理由はありません。

  3. viewsをレイヤーと呼ばないでください。コードを読んでいる人にとっては混乱を招きます。それは層ではない場合は、それを呼び出すことはありませんと、シンプル。

let layer = UIImageView(image:UIImage(named: "LaunchIcon"))

  1. シングルをラップする場合は、CAAnimationGroupは必要ありません CABasicAnimation

実用的な解決策:

実際、ここでCoreAnimationを使用する必要はありませんUIKitこれは、より高いレベルのプレーンで実装できますこの場合の親友は、のマスクプロパティUIViewanimateWithDurationメソッドです。

class GlassView: UIView {

    let liquidView = UIView() //is going to be animated from bottom to top
    let shapeView = UIImageView() //is going to mask everything with alpha mask

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        self.backgroundColor = UIColor.darkGray
        self.liquidView.backgroundColor = UIColor.orange

        self.shapeView.contentMode = .scaleAspectFit
        self.shapeView.image = UIImage(named: "glass")

        self.addSubview(liquidView)
        self.mask = shapeView

        layoutIfNeeded()
        reset()
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        liquidView.frame = self.bounds
        shapeView.frame = self.bounds            
    }

    func reset() {
        liquidView.frame.origin.y = bounds.height
    }

    func animate() {
        reset()
        UIView.animate(withDuration: 1) {
            self.liquidView.frame.origin.y = 0
        }
    }
}

出力:

ここに画像の説明を入力してください

使用済みマスク

実装の詳細:

ビューのアルファチャネルは、ビューのコンテンツと背景がどれだけ透けて見えるかを決定します。完全にまたは部分的に不透明なピクセルを使用すると、基になるコンテンツが透けて見えますが、完全に透明なピクセルはそのコンテンツをブロックします。

マスク画像が.png透明な背景に図形を含んでいることを確認してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

雲または任意のフォームを色で塗りつぶします(アニメーション)

分類Dev

UIViewの一部をアニメーションで色で塗りつぶします

分類Dev

UIImageViewレイヤーの境界線の幅の色を塗りつぶして進行状況をアニメーション化します

分類Dev

svgアニメーションが完了した後に色を塗りつぶしたいのですが、実行されません

分類Dev

楕円を波のアニメーションで塗りつぶす

分類Dev

jqueryを使用してSVGの塗りつぶしをアニメーション化しますか?

分類Dev

Swift での SpriteKit カラー塗りつぶしアニメーション

分類Dev

Androidで「塗りつぶし」アニメーションを作成する方法

分類Dev

ベジェで作成された曲線の塗りつぶしの色をアニメートしますか?

分類Dev

iOS-UIBezierPathのアニメーションを下から塗りつぶす

分類Dev

Pythonとmatplotlibを使用して長方形の内側の色の塗りつぶしをアニメーション化する方法は?

分類Dev

カラーSVGパスをアニメーションで塗りつぶします

分類Dev

CSSを使用してSVGパス要素の塗りつぶしをアニメーション化する

分類Dev

divの背景色の塗りつぶしをアニメーション化する方法

分類Dev

divを円形のカラーアニメーションで塗りつぶす

分類Dev

アニメーション効果の塗りつぶしSVGを描画する方法は?

分類Dev

パネルを3色のグラデーションで塗りつぶします

分類Dev

ホバー中にテキストカラーアニメーションをアニメーションカラーで塗りつぶします

分類Dev

svg塗りつぶしパスアニメーションの問題

分類Dev

アニメーションによる Svg パスの塗りつぶし

分類Dev

マウスオーバー/マウスアウト(SMIL)でインラインSVGの塗りつぶし属性をアニメーション化する方法

分類Dev

JavaScriptを使用したSVG要素の塗りつぶしの不透明度のアニメーション

分類Dev

CSS(JS)を使用して、SVG写真のパスと塗りつぶしをアニメーション化(描画)します

分類Dev

Androidでアニメーションを使用して中心から円の背景色をゆっくり塗りつぶす方法

分類Dev

ページの読み込み時にdivで塗りつぶしアニメーションを表示できません

分類Dev

SVGはグラデーションの塗りつぶしの色を操作します

分類Dev

CSSクラスに応じてSVG塗りつぶしアニメーションの高さを変更します

分類Dev

ヘビアプリケーションでグリッド間の色を塗りつぶす方法

分類Dev

swiftUIのグラデーション塗りつぶしのアニメーション

Related 関連記事

  1. 1

    雲または任意のフォームを色で塗りつぶします(アニメーション)

  2. 2

    UIViewの一部をアニメーションで色で塗りつぶします

  3. 3

    UIImageViewレイヤーの境界線の幅の色を塗りつぶして進行状況をアニメーション化します

  4. 4

    svgアニメーションが完了した後に色を塗りつぶしたいのですが、実行されません

  5. 5

    楕円を波のアニメーションで塗りつぶす

  6. 6

    jqueryを使用してSVGの塗りつぶしをアニメーション化しますか?

  7. 7

    Swift での SpriteKit カラー塗りつぶしアニメーション

  8. 8

    Androidで「塗りつぶし」アニメーションを作成する方法

  9. 9

    ベジェで作成された曲線の塗りつぶしの色をアニメートしますか?

  10. 10

    iOS-UIBezierPathのアニメーションを下から塗りつぶす

  11. 11

    Pythonとmatplotlibを使用して長方形の内側の色の塗りつぶしをアニメーション化する方法は?

  12. 12

    カラーSVGパスをアニメーションで塗りつぶします

  13. 13

    CSSを使用してSVGパス要素の塗りつぶしをアニメーション化する

  14. 14

    divの背景色の塗りつぶしをアニメーション化する方法

  15. 15

    divを円形のカラーアニメーションで塗りつぶす

  16. 16

    アニメーション効果の塗りつぶしSVGを描画する方法は?

  17. 17

    パネルを3色のグラデーションで塗りつぶします

  18. 18

    ホバー中にテキストカラーアニメーションをアニメーションカラーで塗りつぶします

  19. 19

    svg塗りつぶしパスアニメーションの問題

  20. 20

    アニメーションによる Svg パスの塗りつぶし

  21. 21

    マウスオーバー/マウスアウト(SMIL)でインラインSVGの塗りつぶし属性をアニメーション化する方法

  22. 22

    JavaScriptを使用したSVG要素の塗りつぶしの不透明度のアニメーション

  23. 23

    CSS(JS)を使用して、SVG写真のパスと塗りつぶしをアニメーション化(描画)します

  24. 24

    Androidでアニメーションを使用して中心から円の背景色をゆっくり塗りつぶす方法

  25. 25

    ページの読み込み時にdivで塗りつぶしアニメーションを表示できません

  26. 26

    SVGはグラデーションの塗りつぶしの色を操作します

  27. 27

    CSSクラスに応じてSVG塗りつぶしアニメーションの高さを変更します

  28. 28

    ヘビアプリケーションでグリッド間の色を塗りつぶす方法

  29. 29

    swiftUIのグラデーション塗りつぶしのアニメーション

ホットタグ

アーカイブ