美文网首页
微信摇一摇

微信摇一摇

作者: YYYLynn | 来源:发表于2016-03-01 14:17 被阅读119次

    最近有做到摇一摇, 发现还是很简单的, 随手一记
    主要实现的功能是: 开始要摇动的时候, 图片会向两边分开, 并且会有声音, 出现动画, 结束后, 图片合并, 动画消失,结束声音。
    首先是系统框架: <AVFoundation/AVFoundation.h>, 用于声音的播放。

    viewDidLoad

    // 上半部分的图
    imgUp = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, 270 * KScreenWidth / 375)];
    imgUp.image = [UIImage imageNamed:@"ShakeUp1"];
    [self.view addSubview:imgUp];
    
    // 下半部分的图
    imgDown = [[UIImageView alloc]initWithFrame:CGRectMake(0, imgUp.y + imgUp.height , KScreenWidth, KScreenHeight - 64 - imgUp.y - imgUp.height)];
    imgDown.image = [UIImage imageNamed:@"ShakeDown1"];
    [self.view addSubview:imgDown];
    // 中间的 GIF
    imgGif = [[UIImageView alloc]initWithFrame:CGRectMake((KScreenWidth - 100 * KScreenWidth / 375) / 2, 210 * KScreenWidth / 375, 100 * KScreenWidth / 375, 100 * KScreenWidth / 375)];
    imgGif.image = [UIImage imageNamed:@"1"];
    [self.view addSubview:imgGif];
    
    // 装载图片的数组
    NSMutableArray *imageArray = [NSMutableArray array];
    for (int i = 0; i < 6; i ++)
    {
        NSString *imageString = [NSString stringWithFormat:@"%d", i + 1];
        UIImage *image = [UIImage imageNamed:imageString];
        [imageArray addObject:image];
    }
    imgGif.animationImages = imageArray;
    imgGif.animationDuration = 0.2;
    imgGif.animationRepeatCount = FLT_MAX;
    imgGif.hidden = YES;
    
    // 获得 self.view 的所有子视图
    NSArray *arr=[self.view subviews];
    // 将 imgGif 放到最下面
    [self.view insertSubview:[arr lastObject] belowSubview:[arr firstObject]];
    
    
    // 摇一摇
    [[UIApplication sharedApplication]setApplicationSupportsShakeToEdit:YES];
    [self becomeFirstResponder];
    

    摇一摇还要实现三个方法:

    // 检测到摇一摇
    、、、
    -(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
    {
    NSLog(@"开始");
    if (event.subtype == UIEventSubtypeMotionShake)
    {
    [UIView animateWithDuration:0.4 animations:^{
    imgUp.image = [UIImage imageNamed:@"ShakeUp"];
    imgDown.image = [UIImage imageNamed:@"ShakeDown"];
    imgUp.y = -70 * KScreenWidth / 375;
    imgDown.y = KScreenHeight - 64 - 263 * KScreenWidth / 375;
    imgGif.hidden = NO;
    [imgGif startAnimating];
    }];
    NSString *soundFielPath= [[NSBundle mainBundle]pathForResource:@"shake_sound_male" ofType:@"mp3"];
    NSURL *fileURL=[[NSURL alloc]initFileURLWithPath:soundFielPath];
    AVAudioPlayer *newPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:fileURL error:nil];
    player=newPlayer;
    [player prepareToPlay];
    //开始播放
    [player play];
    }
    }

    // 摇一摇取消
    -(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
    {
    NSLog(@"取消");
    [UIView animateWithDuration:0.4 animations:^{
    imgUp.y = 0;
    imgDown.y = 270 * KScreenWidth / 375;
    imgUp.image = [UIImage imageNamed:@"ShakeUp1"];
    imgDown.image = [UIImage imageNamed:@"ShakeDown1"];
    } completion:^(BOOL finished) {
    [imgGif stopAnimating];
    imgGif.hidden = YES;
    }];
    }

    // 摇一摇结束
    -(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
    {
    if (event.subtype == UIEventSubtypeMotionShake)
    {
    [UIView animateWithDuration:0.4 animations:^{
    imgUp.y = 0;
    imgDown.y = 270 * KScreenWidth / 375;
    imgUp.image = [UIImage imageNamed:@"ShakeUp1"];
    imgDown.image = [UIImage imageNamed:@"ShakeDown1"];
    } completion:^(BOOL finished) {
    [imgGif stopAnimating];
    imgGif.hidden = YES;
    num -= 1;
    if (num <= 0)
    {
    num = 0;
    }
    label.text = [NSString stringWithFormat:@"摇一摇有惊喜, 今日剩余%ld次", (long)num];
    }];
    NSString *soundFielPath= [[NSBundle mainBundle]pathForResource:@"shake_match" ofType:@"mp3"];
    NSURL *fileURL=[[NSURL alloc]initFileURLWithPath:soundFielPath];
    AVAudioPlayer *newPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:fileURL error:nil];
    player=newPlayer;
    [player prepareToPlay];
    [player play];
    NSLog(@"摇到 xxx");
    }
    }
    、、、

    相关文章

      网友评论

          本文标题:微信摇一摇

          本文链接:https://www.haomeiwen.com/subject/fmagkttx.html