- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个绘图应用程序,我希望我的用户能够在他们的绘图中使用粒子效果。基本上,该应用程序的目的是执行自定义绘图并保存到相机胶卷或通过万维网共享。
我最近遇到了 CAEmitterLayer
类,我认为这是添加粒子效果的一种简单有效的方法。
我已经能够使用 CAEmitterLayer
实现在应用程序的屏幕上绘制粒子。所以在屏幕上渲染效果很好。
当我开始渲染绘图的内容时使用
CGContextRef context = UIGraphicsBeginImageContextWithSize(self.bounds.size);
// The instance drawingView has a CAEmitterLayer instance in its layer/view hierarchy
[drawingView.layer renderInContext:context];
//Note: I have also tried using the layer.presentationLayer and still nada
....
//Get the image from the current image context here for saving to Camera Roll or sharing
....the particles are never rendered in the image.
我认为正在发生的事情
CAEmitterLayer
处于“激活”粒子的恒定状态。这就是为什么当我尝试渲染图层时(我也尝试渲染 layers.presentationLayer
和 modelLayer),动画永远不会提交,因此屏幕外图像渲染不包含粒子。
问题是否有人在屏幕外渲染了 CAEmitterLayer
的内容?如果有,你是怎么做到的?
备选问题有谁知道任何不使用 OpenGL 且不是 Cocos2D 的粒子效果系统库?
最佳答案
-[CALayer renderInContext:]
在一些简单的情况下很有用,但在更复杂的情况下将无法按预期工作。您将需要找到其他方法来进行绘图。
The documentation for -[CALayer renderInContext:]
说:
The Mac OS X v10.5 implementation of this method does not support the entire Core Animation composition model. QCCompositionLayer, CAOpenGLLayer, and QTMovieLayer layers are not rendered. Additionally, layers that use 3D transforms are not rendered, nor are layers that specify backgroundFilters, filters, compositingFilter, or a mask values. Future versions of Mac OS X may add support for rendering these layers and properties.
(这些限制也适用于 iOS。)
header CALayer.h
还说:
* WARNING: currently this method does not implement the full
* CoreAnimation composition model, use with caution. */
关于ios - CAEmitterLayer 在-renderInContext : of superlayer is called 时不渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11926690/
所以我使用 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 形式发出表情符
我是一名优秀的程序员,十分优秀!