zoukankan      html  css  js  c++  java
  • 【简易版】IOS仿periscope自制狂赞飘桃心

    periscope自制狂赞飘桃心

    国外的IOS app“periscope”非常的火,观看手机视频直播的时候,点击屏幕任何一个地方,屏幕右下角就能飘出各种颜色的桃心,效果非常的炫!

    为此我自制了一个仿periscope桃心的代码:

    - (void) StartLittleHeartShow{

        // 构造一个小桃心的UIImageView,其中桃心的颜色可以随机变化

        float fColorRedBase   = random()%10/10.0;

        float fColorGreenBase = random()%5/10.0;

        float fColorBlueBase  = random()%5/10.0;

        float fAlphaBase      = 1.0 - random()%7/10.0;

        //小桃心的颜色

        UIColor* heartColor = [[UIColor alloc] initWithRed:fColorRedBase green:fColorGreenBase blue:fColorBlueBase alpha:fAlphaBase];

        //向UIImage的桃心图片中填入随机颜色 

        UIImage* flakeImage = [[UIImage imageNamed:@"PooHeart.png"] imageWithTintColor:heartColor];

        UIImageView* flakeView = [[UIImageView alloc] initWithImage:flakeImage];

        float fXBase = HEART_BK_VIEW_WIDTH/2;//HEART_BK_VIEW_WIDTH是窗体view的宽度

        float fYBase = HEART_BK_VIEW_HEIGHT;//HEART_BK_VIEW_HEIGHT是窗体view的高度

     

        // 设置小桃心动画起始点,X位置向右随机偏移0~19

        long lRandom = random();

        int startX = fXBase+lRandom%20;

        int startY = fYBase;

        //设置小桃心动画结束点,X位置左右偏移0~74

        int endX = ((lRandom%2)==0) ? (startX - lRandom%75) : (startX + lRandom%75);

        double scale = 1 / round(random() % 100) + 1.0;//设置桃心大小的随机偏移,这样出来的桃心大小就可以不一样

        double speed = 1 / round(random() % 100) + 1.0;//设置桃心飞行的速度偏移,这样每个桃心飞出来的速度就可以不一样

        

        scale = (scale > 1.5) ? 1.5 : scale;

     

        flakeView.frame = CGRectMake(startX, startY, 25.0 * scale, 25.0 * scale);//初始化桃心的frame

        

        @try {

            // 把该桃心加入到主视图中,注意在动画完成后,需要把这个桃心从主视图中remove掉

            [self.view addSubview:flakeView];

            

            [UIView beginAnimations:nil context:(__bridge void *)(flakeView)];

            // 设置桃心飞行的时间,也就是其飞行的速度

            float fSpeedBase = random()%5;

            fSpeedBase = (fSpeedBase < 3.0) ? 3.0 : fSpeedBase;

            float fDuration = fSpeedBase * speed;

            fDuration = (fDuration > 5.0) ? 5.0 : fDuration;

            fDuration = (fDuration <= 0) ? 2.5 : fDuration;

            fDuration = fDuration - 1;

            [UIView setAnimationDuration:fDuration];

            

            // 设置桃心的飞行终点!

            flakeView.frame = CGRectMake(endX, fYBase-HEART_BK_VIEW_HEIGHT-random()%50, 25.0 * scale, 25.0 * scale);

            

            // 设置桃心动画结束后的callback函数,需要在callback中将flakeView移除self.view

            [UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)];

            [UIView setAnimationDelegate:self];

            [UIView commitAnimations];//开始动画

        }

        @catch (NSException *exception) {

            NSLog(@"StartLoveShow exception...");

        }

    }

     //在动画结束后,onAnimationComplete函数中移除flakeView

    - (void)onAnimationComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {

        UIImageView *flakeView = (__bridge UIImageView *)(context);

        flakeView.hidden = YES;

        [flakeView removeFromSuperview];

    }

    //最后放入一个全屏的click事件中,就可以了,点击任何一个地方都可以出桃心

     

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

        [self StartLoveShow];

    }

     

  • 相关阅读:
    Docker容器启动时初始化Mysql数据库
    使用Buildpacks高效构建Docker镜像
    Mybatis 强大的结果集映射器resultMap
    Java 集合排序策略接口 Comparator
    Spring MVC 函数式编程进阶
    换一种方式编写 Spring MVC 接口
    【asp.net core 系列】6 实战之 一个项目的完整结构
    【asp.net core 系列】5 布局页和静态资源
    【asp.net core 系列】4. 更高更强的路由
    【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建
  • 原文地址:https://www.cnblogs.com/runner42/p/4638616.html
Copyright © 2011-2022 走看看