iOS animation development----particle System---ribbon effect

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>
Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.