- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在努力创建一个与屏幕高度相同的 CAEmitterLayer,并推离 -X,因此 CAEmitterCells 从左侧(离开屏幕)移动到右上角。
我遇到了一个问题,CAEmitterLayer 的 emitterSize height 属性被忽略了。这会导致所有单元从一个点发射,而不是使用 emitterSize 设置的点。
这是发射器:
emitter.emitterPosition = CGPoint(x: -50, y: (view.frame.height / 2))
emitter.emitterShape = kCAEmitterLayerLine
emitter.emitterSize = CGSize(width: 2, height: view.frame.height)
我提到 emitterSize height 不起作用,因为如果我更改上面 emitterSize 的宽度,我可以看到宽度正确变化!无论我为高度设定什么值...它都会被忽略。
和 CAEmitterCells
cell.birthRate = 10
cell.lifetime = 10
cell.velocity = CGFloat(50)
cell.emissionLongitude = (45 * (.pi/180))
如何将 emitterSize 宽度设置为 2 点宽和 View 的高度?
最佳答案
kCAEmitterLayerLine
始终是零粗细的水平线。仅使用 emitterSize.width
。
您可以通过将发射层的变换设置为旋转来垂直使用线条形状。 Playground 示例:
import UIKit
import PlaygroundSupport
class VerticalEmitterView: UIView {
let emitter = CAEmitterLayer()
override func layoutSubviews() {
super.layoutSubviews()
let bounds = self.bounds
emitter.position = CGPoint(x: bounds.midX, y: bounds.midY)
emitter.bounds = CGRect(x: 0, y: 0, width: bounds.size.height, height: bounds.size.width)
emitter.emitterPosition = CGPoint(x: bounds.width / 2, y: -50)
emitter.emitterSize = CGSize(width: emitter.bounds.size.width, height: 0)
if emitter.superlayer != self.layer {
emitter.setAffineTransform(CGAffineTransform(rotationAngle: -.pi / 2))
emitter.emitterShape = kCAEmitterLayerLine
let cell = CAEmitterCell()
cell.birthRate = 100
cell.lifetime = 10
cell.velocity = 50
cell.emissionLongitude = .pi
cell.color = UIColor.red.cgColor
let particleSize = CGSize(width: 5, height: 5)
let image = UIGraphicsImageRenderer(size: particleSize).image(actions: { (rc) in
UIColor.white.setFill()
let gc = UIGraphicsGetCurrentContext()
UIBezierPath(ovalIn: CGRect(origin: .zero, size: particleSize)).fill()
})
cell.contents = image.cgImage
emitter.emitterCells = [cell]
layer.addSublayer(emitter)
}
}
}
let rootView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
rootView.backgroundColor = .white
let emitterView = VerticalEmitterView(frame: rootView.bounds)
rootView.addSubview(emitterView)
PlaygroundPage.current.liveView = rootView
结果:
(不连续是因为这个 GIF 是一个一秒的循环。)
关于swift - 创建一个垂直的 CAEmitterLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48605704/
所以我使用 CAEmitterLayer 开发了一个应用程序。最初我让它自动发射(当应用程序加载时,它将开始发射 Spark ),它在模拟器和设备中都工作得很好。 现在,我将其更改为当用户点击屏幕时发
我只想运行一次 CAEmitterLayer,我想停止birthRate,但我做不到。我想要的是它在点击屏幕时只运行一次。我一直在尝试与代表合作,但我无法让它发挥作用。你能告诉我我的代码是否有效。
我有一个 CAEmitterLayer 实例,它发出一些 CAEmitterCells。我想知道,是否可以暂停这一层,这样就不会产生新的 CAEmitterCells 并且已经产生的那些在屏幕上的位置
我只是将 UIView 添加到我的 storyboard view controller,然后创建一个 UIView 类来显示粒子效果。我将 UIView 的 类名称更改为我创建的自定义类的名称。我在
我正在努力创建一个与屏幕高度相同的 CAEmitterLayer,并推离 -X,因此 CAEmitterCells 从左侧(离开屏幕)移动到右上角。 我遇到了一个问题,CAEmitterLayer 的
我有一个 CAEmitterLayer 实例,我想暂停然后恢复多次。 我已经找到了多种使用两个 CAEmitterLayer 扩展函数来实现这一点的方法: public func pause() {
我正在使用 Apple 的 CAEmitterLayer 和 CAEmitterCell 设计一个粒子系统,在 iPhone5 和模拟器上一切都很顺利。但是一旦我在 iPhone4S 上运行它,粒子系
我在 iOS 中使用 CAEmitterLayer 玩粒子系统(就像在 this example 中一样),但我无法在需要时移除粒子。 我正在尝试以下代码,但它不起作用: [self.emitterL
我正在尝试重新创建此效果(请参见下图),但是具有圆形路径,因为我有一个圆形按钮。 这是来源。 https://github.com/uiue/ParticleButton/blob/master/Pa
在 iPad 版 Swift Playgrounds 中,我很难将 CAEmitterLayer 实例永久限制在中心。例如,它保持居中直到设备旋转,因此我需要找到某种方法将其限制在所有设备方向的中心。
我想在用户猜对后制作五彩纸屑效果,我在网上搜索了一些看起来不错的东西,但是它只有.m文件,我不知道如何处理头文件。 This is the link to the page with the Conf
我想在矩形内制作粒子。 这段代码有什么问题?它仅从发射器位置发射,而不是矩形中的随机位置。 fireEmitter = [CAEmitterLayer layer]; [self.view.layer
我已经阅读了一些教程并查看了文档,但我无法让我的 CAEmitterLayer 显示任何粒子。我有一个 CAEmitterLayer 和 CAEmitterCell 属性,它们都具有 nonatomi
我有以下代码,将粒子添加到位于其他一些 UIView 中心的名为 ParentView 的 UIView: CAEmitterLayer *emitterLayer = [CAEmitterLayer
我想创建一个树叶飘落的动画这是我的代码: private func setupEmitter() { let size = self.bounds.size let emitter
我似乎无法解决的奇怪问题仅在 iOS 7 上,当出生率最初设置为非零值时,CAEmitterLayer 会在屏幕上错误地生成粒子.就好像它计算了层在未来的状态。 // Create black ima
我正在尝试设置一个 CAEmitterLayer 来制作五彩纸屑效果,我遇到了两个问题: 每当我将单元格上的 birthRate 设置为非零值以启动动画时,我都会在屏幕上随机放置一系列单元格,这些单元
有什么想法为什么仅使用带有 CAEmitterLayer 子层的普通 ScreenSaverView 子类的屏幕保护程序会在主屏幕上渲染良好并且断断续续(就好像每 2. 帧渲染一样)在那里..)在辅助
我正在尝试为 CAEmitterLayer 的 emitterPosition 设置动画,如下所示: CABasicAnimation *animation = [CABasicAnimation a
我们一直看到的一个非常奇怪的问题(下面的 gif), 我们有一个呈现的 View Controller ,它有一个 TeamBadgeView,这是一个以 CAEmitterCells 形式发出表情符
我是一名优秀的程序员,十分优秀!