类似气泡的动画随笔

做iOS也有段时间了,也经常从博客上获取一些资料代码等有用信息,并且身边的朋友同学都在写博客,感觉是写个博客时间逼格很高的事情,所以就申请了一个,和大家分享一下自己的东西。(ps:由于自己也是个初学者,所有有些不对的地方还请大家指正,让我更好的提高)。

  好了,废话不多说,这篇博文的重点是介绍一下一个简单的动画效果,点击View,产生一个气泡上升的动画效果。效果如下,

                                                             

  其实这个效果的实现是很简单的,我贴一下自己的代码,有用的话可以参考一下.

首先,当有手指触摸事件在当前视图或window窗体中响应时会走下面的方法,并且可以获取到点击的point值.他的原理就是通过获取NSSet(当前接收者有关的所有的触摸对象)和UITouch(视图中的所有对象来判断触碰点在当前视图中的位置的(point).代码实现如下

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSSet *allTouches = [event allTouches];  
    UITouch *touch = [allTouches anyObject];   
    CGPoint point = [touch locationInView:[touch view]];

    int touchX = point.x;
    int touchY = point.y;
}

获取到点击的当前位置后,就可以开始实现动画效果了.动画分为两部分,一是气泡的产生,使用最普通的动画,设置一下动画的间断时间和气泡的大小即可.代码如下

// 最普通动画:
    [UIView animateWithDuration:0.5 animations:^{
        //规定气泡的大小 位置 透明度,其中x y为上一步骤中获取到的x y
        flakeView.frame = CGRectMake(x,y,width,height);
        flakeView.alpha = 0.55;
    }];

第一步完成后气泡就产生了,接下来需要做的是气泡运动的动画,这个过程其实也是很简单的,但是需要规定一个动画结束时的坐标值,其中y只要不在屏幕内即可,x可以产生一个随机数,这样的话 就能产生气泡“乱跑 的效果”.代码如下

//随机的产生X
  int endX = round(random() % 1024);
//随机数 产生时间间隔
  double speed = 1 / round(random() % 100) + 1.0;

//动画产生 消失
[UIView beginAnimations:nil context:(__bridge void * _Nullable)(flakeView)];
    [UIView setAnimationDuration:5 * speed];
    flakeView.frame = CGRectMake(endX, -10.0, 25.0, 25.0 );
    [UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)];
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];

动画结束后执行下面方法让其从View上移除.代码如下,

- (void)onAnimationComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
//    UIImageView *flakeView = CFBridgingRelease(context);
    UIImageView *flakeView = (UIImageView *)[self.view viewWithTag:1];
    [flakeView removeFromSuperview];
}

但是这里出现一个问题就是在这个方法里如果执行 UIImageView *flakeView = CFBridgingRelease(context);就会出现内存问题,希望有看见的大神能帮小弟解决一下疑问.

  最初看到这个效果实在新版的人人上,(ps:你是不是有个疑问,怎么还有人用人人网,哈,其实我也是出于好奇),但是确实没有想到这么简单就实现了.自己是个小菜鸟,但是也很高兴和大家分享一些东西的,我写的这些其实也是很初级的东西,可能仅仅适用于初学者,如果大牛路过的话,留个赞鼓励一下,呵呵一笑就可以了。

 同时也感谢网上的大牛所提供的资料。

 

posted @ 2016-01-20 11:00  Jeamine  阅读(408)  评论(0编辑  收藏  举报