问题描述
您好,我有一个关于发射经度和纬度的问题,我不知道它们的用途是什么。 我目前正在学习一本有关动画的教程,并且现在就在CAEmitterLayer上,由于我对这两件事一无所知,所以我已停止学习。 多谢您的协助。 谢谢。
解决方法
通常,最好的学习方法是尝试。我建议您点击该文章末尾的源代码链接(here),下载该项目,然后使用该代码。
根据该文章,这是一个快速,简单的示例:
class EmmitterTestViewController: UIViewController {
let eView = BasicParticleView()
override func viewDidLoad() {
super.viewDidLoad()
// create a 12x12 round red image
let img = roundImage(with: .red)
eView.particleImage = img
eView.translatesAutoresizingMaskIntoConstraints = false
eView.backgroundColor = .cyan
view.addSubview(eView)
let g = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
eView.topAnchor.constraint(equalTo: g.topAnchor,constant: 20.0),eView.leadingAnchor.constraint(equalTo: g.leadingAnchor,eView.trailingAnchor.constraint(equalTo: g.trailingAnchor,constant: -20.0),eView.bottomAnchor.constraint(equalTo: g.bottomAnchor,])
}
func roundImage(with color: UIColor) -> UIImage {
let rect = CGRect(origin: .zero,size: CGSize(width: 12.0,height: 12.0))
return UIGraphicsImageRenderer(size: rect.size).image { context in
context.cgContext.setFillColor(color.cgColor)
context.cgContext.addPath(UIBezierPath(ovalIn: rect).cgPath)
context.cgContext.fillPath()
}
}
}
class BasicParticleView:UIView {
var particleImage:UIImage?
override class var layerClass:AnyClass {
return CAEmitterLayer.self
}
func makeEmmiterCell(color:UIColor,velocity:CGFloat,scale:CGFloat)-> CAEmitterCell {
let cell = CAEmitterCell()
cell.birthRate = 10
cell.lifetime = 20.0
cell.lifetimeRange = 0
cell.velocity = velocity
cell.velocityRange = velocity / 4
cell.emissionRange = .pi / 8
cell.scale = scale
cell.scaleRange = scale / 3
cell.contents = particleImage?.cgImage
// emissionLongitude - direction of particles on x/y plane
// .pi * 0.0 == up
// .pi * 1.0 == down
// .pi * 0.5 == left-to-right
// .pi * 1.5 == right-to-left
// .pi * 0.25 == angle-up-right
cell.emissionLongitude = .pi * 0.0
return cell
}
override func layoutSubviews() {
let emitter = self.layer as! CAEmitterLayer
emitter.masksToBounds = true
emitter.emitterShape = .line
emitter.emitterPosition = CGPoint(x: bounds.midX,y: bounds.midY)
emitter.emitterSize = CGSize(width: 1,height: 1)
let cell = makeEmmiterCell(color: UIColor(white: 1,alpha: 1),velocity: 100,scale: 0.3)
emitter.emitterCells = [cell]
}
}
这将创建青色视图(每侧插入20点以使其易于看到),并将生成圆形的红色粒子。在注释中请注意如何使用.emissionLongitude
来更改方向。
.emissionLongitude = 0
的样子-粒子“向上”移动:
.emissionLongitude = .pi
的样子-粒子“向下”移动:
并且使用.emissionLongitude = .pi * 0.25
-粒子“向右移动”:
使用设置...阅读文档...阅读文章/教程...检查示例代码...边走边学:)