Thursday, 15 September 2011

objective c - How to Generate a Shockwave Effect -



objective c - How to Generate a Shockwave Effect -

i generate shockwave effect when tap on circular uiview. effect i'm looking similar 'circadia' on app store.

note circular line expanding centre view. couldn't find kind of tutorial, tried effect using cheat:

-(void)startshockwave:(uiview *)target { // replace view tapped 1 expand uiview *wave = [[uiview alloc]initwithframe:target.frame]; wave.backgroundcolor = target.backgroundcolor; wave.alpha = 0.5; wave.layer.maskstobounds = yes; wave.layer.cornerradius = wave.frame.size.width / 2; // hide below original view [self.view insertsubview:wave belowsubview:target]; cgrect frame = wave.frame; // create view same colour self.view create hole uiview *center = [[uiview alloc]initwithframe:cgrectmake(frame.origin.x + 10, frame.origin.y + 10, frame.size.width - 20, frame.size.height - 20)]; center.backgroundcolor = self.view.backgroundcolor; center.layer.maskstobounds = yes; center.layer.cornerradius = center.frame.size.width / 2; [self.view insertsubview:center abovesubview:wave]; // hide original view target.alpha = 0; // important: send these views behind others center not overlap them [self.view sendsubviewtoback:center]; [self.view sendsubviewtoback:wave]; [uiview animatewithduration:0.4 delay:0 options:uiviewanimationoptioncurvelinear animations:^{ cgaffinetransform wavetransform = wave.transform; cgaffinetransform centertransform = center.transform; // expand views shockwave wave.transform = cgaffinetransformscale(wavetransform, 4, 4); center.transform = cgaffinetransformscale(centertransform, 5.75, 5.75); // fade wave out nil wave.alpha = 0; } completion:^(bool finished) { // remove shockwave [wave removefromsuperview]; [center removefromsuperview]; }]; }

this works quite well...

...with 1 shockwave. however, when intersect, 1 center overlaps other due recent shockwave beingness sent back.

i prefer intersecting shockwaves more this:

i'm not sure how create type of effect, however, help much appreciated!

use [uicolor clearcolor] create center of circle transparent (so can see interface elements residing beneath it).

center.backgroundcolor = [uicolor clearcolor];

objective-c cocoa-touch

No comments:

Post a Comment