#6 自訂 controller 類別和利用 viewDidLoad 客製 App 畫面

這次作業用上次製作的小蘭姊姊再加上其他功能:
利用 CABasicAnimation & CAShapeLayer 繪製線條動畫
利用 SpriteKit Particle File 製造下雪的粒子效果
=>下雪好像只能放在背景,目前沒找到方法顯示在上層
利用 CGAffineTransform 縮放,位移,旋轉和鏡像翻轉

Debug流水帳:

利用 CABasicAnimation & CAShapeLayer 繪製線條動畫:

// heart UIBezierPath and animation
let path = UIBezierPath()
path.move(to: CGPoint(x: 210, y: 530))
path.addCurve(to: CGPoint(x: 210, y: 580), controlPoint1: CGPoint(x: 250, y: 510), controlPoint2: CGPoint(x: 250, y: 530))
path.addCurve(to: CGPoint(x: 210, y: 530), controlPoint1: CGPoint(x: 170, y: 530), controlPoint2: CGPoint(x: 170, y: 510))
path.close()
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.lineWidth = 5
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.fillColor = nil
view.layer.addSublayer(shapeLayer)
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.fromValue = 0
animation.toValue = 1
animation.duration = 1.5
animation.repeatCount = .greatestFiniteMagnitude
animation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
shapeLayer.add(animation, forKey: nil)

利用 SpriteKit Particle File 製造下雪的粒子效果:
在MySnowParticle.sks將雪花換成楓葉,使用SnowViewController.swift呼叫
MagicViewController則是選擇了magic效果,將粒子換成了愛心

class SnowViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let imageView = UIImageView(image: UIImage(named: "小蘭新一"))
imageView.frame = view.frame
imageView.contentMode = .scaleAspectFit
view.addSubview(imageView)
let skView = SKView(frame: view.frame)
view.insertSubview(skView, at: 0)
let scene = SKScene(size: skView.frame.size)
scene.anchorPoint = CGPoint(x: 0.5, y: 1)
let emitterNode = SKEmitterNode(fileNamed: "MySnowParticle")
scene.addChild(emitterNode!)
skView.presentScene(scene)
}
}

利用 CGAffineTransform 縮放,位移,旋轉和鏡像翻轉:
scaleX: -1是水平鏡像翻轉

func addSticker (moveX: CGFloat, moveY: CGFloat, scale: CGFloat, rotate: CGFloat){
// picture CGAffineTransform
let oneDegree = CGFloat.pi/180
let imageView = UIImageView(image: UIImage(named: "灰原"))
imageView.frame = CGRect(x: 0, y: 280, width: 100, height: 100)
imageView.transform = CGAffineTransform.identity.translatedBy(x: moveX, y: moveY).scaledBy(x: scale, y: scale).rotated(by: oneDegree * rotate)
view.addSubview(imageView)
}

call func addSticker

// add picture CGAffineTransform
addSticker(moveX: 0, moveY: 80, scale: 0.5, rotate: -110)
addSticker(moveX: 65, moveY: 70, scale: 0.6, rotate: -85)
addSticker(moveX: 150, moveY: 60, scale: 0.8, rotate: -50)
addSticker(moveX: 270, moveY: 50, scale: 1.2, rotate: 0)
//imageView.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
//imageView.transform = CGAffineTransform.identity.scaledBy(x: 0.8, y: 0.8)
//imageView.transform = CGAffineTransform(translationX: 20, y: 50)
//imageView.transform = CGAffineTransform.identity.translatedBy(x: 20, y: 50)

GitHub:

--

--