iOS animation development----particle System---ribbon effect
Last Update:2016-02-22
Source: Internet
Author: User
<span id="Label3"></p><p><p>Reference Post Address: Http://my.oschina.net/u/2340880/blog/485095?fromerr=bgjLq4Mw</p></p>one, particle Emitter<p><p>The particle effect in iOS is made up of two parts, a launcher, a macro attribute for an example launch, and a particle element to set the corresponding particle properties. The particle emitter is based on a layer, and his full name is Called: caemitterlayer. The following properties are commonly used:</p></p><p><p>@property (copy) Nsarray *emittercells;</p></p><p><p>An array of particle elements, such as when you are plotting the effect of a flame, you can create two units, one unit responsible for the smoke, and one unit responsible for the Flames.</p></p><p><p></p></p><p><p>@property float birthrate;</p></p><p><p>The Particle's creation rate, which defaults to 1/s.</p></p><p><p></p></p><p><p>@property float lifetime;</p></p><p><p>The survival time of the Particles. The default is 1S.</p></p><p><p></p></p><p><p>@property Cgpoint emitterposition;</p></p><p><p>Emitter at the center of the XY plane</p></p><p><p></p></p><p><p>@property CGFloat emitterzposition;</p></p><p><p>Position of the emitter in the Z plane</p></p><p><p></p></p><p><p>@property cgsize emittersize;</p></p><p><p>Size of transmitter</p></p><p><p></p></p><p><p>@property CGFloat emitterdepth;</p></p><p><p>The depth of the transmitter, which produces a stereo effect in some modes</p></p><p><p></p></p><p><p>@property (copy) NSString *emittershape;</p></p><p><p>The shape of the emitter, this parameter of several system strings is as Follows:</p></p> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="gutter">123456789101112</td> <td class="code"><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerPoint</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0); </code></code><code class="cpp comments"><code class="cpp comments">//点的形状,粒子从一个点发出</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerLine</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//线的形状,粒子从一条线发出</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerRectangle</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//矩形形状,粒子从一个矩形中发出</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerCuboid</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//立方体形状,会影响Z平面的效果</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerCircle</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//圆形,粒子会在圆形范围发射</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerSphere</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//球型</code></code></td> </tr> </tbody> </table><p><p></p></p><p><p>@property (copy) NSString *emittermode;</p></p><p><p>The transmitter mode, the parameters are as Follows:</p></p> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="gutter">12345678</td> <td class="code"><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerPoints</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//从发射器中发出</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerOutline</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//从发射器边缘发出</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerSurface</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//从发射器表面发出</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerVolume</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//从发射器中点发出</code></code></td> </tr> </tbody> </table><p><p></p></p><p><p>@property (copy) NSString *rendermode;</p></p><p><p>Emitter rendering mode with the following parameters:</p></p> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="gutter">12345678910</td> <td class="code"><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerUnordered</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//这种模式下,粒子是无序出现的,多个发射源将混合</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerOldestFirst</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//这种模式下,声明久的粒子会被渲染在最上层</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerOldestLast</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//这种模式下,年轻的粒子会被渲染在最上层</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerBackToFront</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//这种模式下,粒子的渲染按照Z轴的前后顺序进行</code></code><code class="cpp plain"><code class="cpp plain">CA_EXTERN NSString * </code></code><code class="cpp keyword bold"><code class="cpp keyword bold">const</code></code><code class="cpp plain"><code class="cpp plain">kCAEmitterLayerAdditive</code></code><code class="cpp spaces"><code class="cpp spaces"> </code></code><code class="cpp plain"><code class="cpp plain">__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);</code></code><code class="cpp comments"><code class="cpp comments">//这种模式会进行粒子混合</code></code></td> </tr> </tbody> </table><p><p></p></p><p><p>@property BOOL preservesdepth;</p></p><p><p>Whether to open the three-dimensional space effect</p></p><p><p></p></p><p><p>@property float velocity;</p></p><p><p>Velocity of particle movement</p></p><p><p></p></p><p><p>@property float scale;</p></p><p><p>Scale size of particles</p></p><p><p></p></p><p><p>@property float spin;</p></p><p><p>The rotation position of the particle</p></p><p><p></p></p><p><p>@property unsigned int seed;</p></p><p><p>Initialize random particle seeds</p></p>second, the particle unit<p><p>With the particle emitter set up, We also need to initialize some particle cells, set the properties of the specific particles, and the class we use is the Caemittercell class.</p></p><p><p></p></p><p><p>+ (instancetype) emittercell;</p></p><p><p>class method to create a transmitter unit</p></p><p><p></p></p><p><p>@property (copy) NSString *name;</p></p><p><p>Set the name of the transmitter unit</p></p><p><p></p></p><p><p>@property (getter=isenabled) BOOL enabled;</p></p><p><p>Whether to allow emitter rendering</p></p><p><p></p></p><p><p>@property float birthrate;</p></p><p><p>The rate at which particles are created</p></p><p><p></p></p><p><p>@property float lifetime;</p></p><p><p>Time of particle survival</p></p><p><p></p></p><p><p>@property float lifetimerange;</p></p><p><p>Time-to-live tolerance of particles</p></p><p><p></p></p><p><p>@property CGFloat emissionlatitude;</p></p><p><p>The emission angle of the particle in the z-axis direction</p></p><p><p></p></p><p><p>@property CGFloat emissionlongitude;</p></p><p><p>The emission angle of the particle in the XY plane</p></p><p><p></p></p><p><p>@property CGFloat emissionrange;</p></p><p><p>Tolerance of particle emission angle</p></p><p><p></p></p><p><p>@property CGFloat velocity;</p></p><p><p>Velocity of particles</p></p><p><p></p></p><p><p>@property CGFloat velocityrange;</p></p><p><p>Tolerance of particle velocity</p></p><p><p></p></p><p><p>@property CGFloat xacceleration;</p></p><p><p>@property CGFloat yacceleration;</p></p><p><p>@property CGFloat zacceleration;</p></p><p><p>Acceleration in x, y, Z three directions</p></p><p><p></p></p><p><p>@property CGFloat scale;</p></p><p><p>@property CGFloat scalerange;</p></p><p><p>@property CGFloat scalespeed;</p></p><p><p>Scale size, zoom tolerance, and zoom speed</p></p><p><p></p></p><p><p>@property CGFloat spin;</p></p><p><p>@property CGFloat spinrange;</p></p><p><p>Degree of rotation and rotation tolerance</p></p><p><p>@property Cgcolorref color;</p></p><p><p>The color of the particles</p></p><p><p></p></p><p><p>@property float redrange;</p></p><p><p>@property float greenrange;</p></p><p><p>@property float bluerange;</p></p><p><p>@property float alpharange;</p></p><p><p>Tolerance and opacity of particles on RGB three hue</p></p><p><p>@property float redspeed;</p></p><p><p>@property float greenspeed;</p></p><p><p>@property float bluespeed;</p></p><p><p>@property float alphaspeed;</p></p><p><p>Changes in speed and transparency of particles on RGB three hue</p></p><p><p></p></p><p><p>@property (strong) ID contents;</p></p><p><p>Render particles, which can be set to an Cgimage object</p></p><p><p></p></p><p><p>@property CGRect contentsrect;</p></p><p><p>Scope of rendering</p></p>three, the effect of spraying ribbons<pre>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">) startanimation{</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Set Emitter</span></span>_streameremitter=<span style="color: #000000;"><span style="color: #000000;">[[caemitterlayer alloc]init]; _streameremitter.emitterposition</span></span>=cgpointmake (self.view.frame.size.width/<span style="color: #800080;"><span style="color: #800080;">2</span></span>, self.view.frame.size.height/<span style="color: #800080;"><span style="color: #800080;">2</span></span><span style="color: #000000;"><span style="color: #000000;">); _streameremitter.emittersize</span></span>=cgsizemake (self.view.frame.size.width-<span style="color: #800080;"><span style="color: #800080;"></span> -</span>,<span style="color: #800080;"><span style="color: #800080;"></span> -</span><span style="color: #000000;"><span style="color: #000000;">); _streameremitter.rendermode</span></span>=<span style="color: #000000;"><span style="color: #000000;">kcaemitterlayeradditive; _streameremitter.preservesdepth</span></span>=<span style="color: #000000;"><span style="color: #000000;">YES; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Transmitter Unit</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Ribbon</span></span>Caemittercell * Smoke =<span style="color: #000000;"><span style="color: #000000;">[caemittercell emittercell]; Smoke.birthrate</span></span>=<span style="color: #800080;"><span style="color: #800080;"></span> -</span><span style="color: #000000;"><span style="color: #000000;">; Smoke.lifetime</span></span>=<span style="color: #800080;"><span style="color: #800080;">3.0</span></span><span style="color: #000000;"><span style="color: #000000;">; Smoke.lifetimerange</span></span>=<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">; Smoke.scale</span></span>=<span style="color: #800080;"><span style="color: #800080;">0.5</span></span><span style="color: #000000;"><span style="color: #000000;">; Smoke.scalerange</span></span>=<span style="color: #800080;"><span style="color: #800080;">0.5</span></span><span style="color: #000000;"><span style="color: #000000;">; Smoke.color</span></span>=[uicolor colorwithred:<span style="color: #800080;"><span style="color: #800080;">0</span></span>Green<span style="color: #800080;"><span style="color: #800080;">1</span></span>Blue<span style="color: #800080;"><span style="color: #800080;">0</span></span>Alpha<span style="color: #800080;"><span style="color: #800080;">0.2</span></span><span style="color: #000000;"><span style="color: #000000;">]. cgcolor; Smoke.alpharange</span></span>=<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">; Smoke.redrange</span></span>=<span style="color: #800080;"><span style="color: #800080;">255</span></span><span style="color: #000000;"><span style="color: #000000;">; Smoke.bluerange</span></span>=<span style="color: #800080;"><span style="color: #800080;"></span> a</span><span style="color: #000000;"><span style="color: #000000;">; Smoke.greenrange</span></span>=<span style="color: #800080;"><span style="color: #800080;">1.5</span></span><span style="color: #000000;"><span style="color: #000000;">; Smoke.contents</span></span>=(<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>) [[UIImage Imagenamed:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Colored flowers. png</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]cgimage]; [smoke setName:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Smoke</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; Smoke.velocity</span></span>=<span style="color: #800080;"><span style="color: #800080;"></span> $</span><span style="color: #000000;"><span style="color: #000000;">; Smoke.velocityrange</span></span>=<span style="color: #800080;"><span style="color: #800080;"></span> -</span><span style="color: #000000;"><span style="color: #000000;">; Smoke.emissionlongitude</span></span>=m_pi+<span style="color: #000000;"><span style="color: #000000;">m_pi_2; Smoke.emissionrange</span></span>=<span style="color: #000000;"><span style="color: #000000;">m_pi_2; Smoke.spin</span></span>=<span style="color: #000000;"><span style="color: #000000;">m_pi_2; Smoke.spinrange</span></span>=<span style="color: #000000;"><span style="color: #000000;">m_pi_2; _streameremitter.emittercells</span></span>=<span style="color: #000000;"><span style="color: #000000;">[nsarray arraywithobjects:smoke,nil]; [self.myView.layer addsublayer:_streameremitter];}</span></span></pre><p><p></p></p><p><p>iOS animation development----particle System---ribbon effect</p></p></span>