2017-05-09 19 views
4
var emitter = CAEmitterLayer() 
    emitter.emitterPosition = CGPoint(x: self.view.frame.size.width/2, y: -10) 
    emitter.emitterShape = kCAEmitterLayerLine 
    emitter.emitterSize = CGSize(width: self.view.frame.size.width, height: 2.0) 
    emitter.emitterCells = generateEmitterCells() 
    self.view.layer.addSublayer(emitter) 

、CAEmitterLayerは... self.viewの内容が表示されていない...CAEmitterLayerの背景を透明に設定するには?ここ

参考に私の見解をカバーしています。コード:https://oktapodi.github.io/2017/05/08/particle-effects-in-swift-using-caemitterlayer.html

このアニメーションを私の視点で設定したいと思います。

+0

コードはうまく動作します。アニメーションはself.viewの他のレイヤーやサブビューに表示されます。あなたは、self.viewの内容を隠しているか、それを補っている何かをしています。私はあなたもそのコードを投稿することをお勧めします。 –

+0

Jon Roseは正しく動作しています。間違いない。 –

+0

サンプルコードで1行を変更していない...私はちょうどself.viewの画像ビューを追加しました...あなたはちょうど画像やself.viewの何かを追加して、 –

答えて

0

私のシミュレータの精密なチェック出力を行っています。背景画像はストーリーボードから追加され、青色はコードによって追加されます。まだ正常に動作しています。

OUTPUT: enter image description here

0

あなたは今あなたがレイヤーを追加する方法を変更するあなたは時々、他の層とビューオブジェクトを非表示にし、すべての上にそれを追加することで、あなたの問題を解決することができます。

self.view.layer.insertSublayer(emitter, at: 0) 
0

変更

self.view.layer.addSublayer(emitter) 

私はあなたが修正理解していれば、私は知りませんが、これはあなたが探している効果である場合:

enter image description here

次に、以下を行う必要があります。

  1. そのビューのために
  2. はここにあなたのコンテナビューをtrueに

clipsToBoundsを設定する生産私ViewControllerあるコンセントを作成

  • に住むためにあなたのあなたのエミッタのための「コンテナビュー」を追加します。上記のスクリーンショット

    import UIKit 
    
    
    enum Colors { 
        static let red = UIColor(red: 1.0, green: 0.0, blue: 77.0/255.0, alpha: 1.0) 
        static let blue = UIColor.blue 
        static let green = UIColor(red: 35.0/255.0 , green: 233/255, blue: 173/255.0, alpha: 1.0) 
        static let yellow = UIColor(red: 1, green: 209/255, blue: 77.0/255.0, alpha: 1.0) 
    } 
    
    enum Images { 
        static let box = UIImage(named: "Box")! 
        static let triangle = UIImage(named: "Triangle")! 
        static let circle = UIImage(named: "Circle")! 
        static let swirl = UIImage(named: "Spiral")! 
    } 
    
    class ViewController: UIViewController { 
        @IBOutlet weak var emitterContainer: UIView! 
    
        var emitter = CAEmitterLayer() 
    
        var colors:[UIColor] = [ 
         Colors.red, 
         Colors.blue, 
         Colors.green, 
         Colors.yellow 
        ] 
    
        var images:[UIImage] = [ 
         Images.box, 
         Images.triangle, 
         Images.circle, 
         Images.swirl 
        ] 
    
        var velocities:[Int] = [ 
         100, 
         90, 
         150, 
         200 
        ] 
    
    
        override func viewWillAppear(_ animated: Bool) { 
         super.viewWillAppear(animated) 
    
         view.backgroundColor = UIColor.red 
    
         emitter.emitterPosition = CGPoint(x: emitterContainer.frame.size.width/2, y: -10) 
         emitter.emitterShape = kCAEmitterLayerLine 
         emitter.emitterSize = CGSize(width: emitterContainer.frame.size.width, height: 2.0) 
         emitter.emitterCells = generateEmitterCells() 
         emitterContainer.layer.addSublayer(emitter) 
         emitterContainer.clipsToBounds = true 
        } 
    
        private func generateEmitterCells() -> [CAEmitterCell] { 
         var cells:[CAEmitterCell] = [CAEmitterCell]() 
         for index in 0..<16 { 
          let cell = CAEmitterCell() 
    
          cell.birthRate = 4.0 
          cell.lifetime = 14.0 
          cell.lifetimeRange = 0 
          cell.velocity = CGFloat(getRandomVelocity()) 
          cell.velocityRange = 0 
          cell.emissionLongitude = CGFloat(Double.pi) 
          cell.emissionRange = 0.5 
          cell.spin = 3.5 
          cell.spinRange = 0 
          cell.color = getNextColor(i: index) 
          cell.contents = getNextImage(i: index) 
          cell.scaleRange = 0.25 
          cell.scale = 0.1 
    
          cells.append(cell) 
         } 
    
         return cells 
        } 
    
        private func getRandomVelocity() -> Int { 
         return velocities[getRandomNumber()] 
        } 
    
        private func getRandomNumber() -> Int { 
         return Int(arc4random_uniform(4)) 
        } 
    
        private func getNextColor(i:Int) -> CGColor { 
         if i <= 4 { 
          return colors[0].cgColor 
         } else if i <= 8 { 
          return colors[1].cgColor 
         } else if i <= 12 { 
          return colors[2].cgColor 
         } else { 
          return colors[3].cgColor 
         } 
        } 
    
        private func getNextImage(i:Int) -> CGImage { 
         return images[i % 4].cgImage! 
        } 
    } 
    

    希望します。

  • 関連する問題