利用iOS开发实现翻转扑克牌动画的方法

 更新时间:2017年07月17日 10:18:20   作者:斌Jonas  
这篇文章主要给大家介绍了关于利用iOS开发实现翻扑克牌动画的方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来跟着小编一起学习学习吧。

前言

本文主要给大家介绍的关于利用iOS开发实现翻转扑克牌动画的方法,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧。

动画效果


实现原理

实现原理就是创建三个扑克牌pockerView , 先在扑克牌上添加一个imageview,作为牌的背面。然后实现翻转动画,在翻转的时候将imageview移除,添加另一个imageview作为正面。

核心代码:

方法一: 翻转动画,内部实现还是方法二

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

方法二 :UIView动画

[UIView beginAnimations:@"aa" context:nil];
 [UIView setAnimationDuration:_duration];
 [UIView setAnimationCurve:UIViewAnimationCurveLinear];
 [view.imgview1 removeFromSuperview];
 [view addSubview:view.imgview2];
 [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view cache:NO];
 [UIView commitAnimations];

完整代码:

ViewController.m文件代码

#import "ViewController.h"
#import "PockerView.h"
@interface ViewController ()
// 记录翻第几张牌
@property(nonatomic,assign)NSInteger index;
// 动画时间
@property(nonatomic,assign)CGFloat duration;
@end

@implementation ViewController

 

- (void)viewDidLoad {
 [super viewDidLoad];

 self.view.backgroundColor = [UIColor blackColor];
 _duration = 0.5;
 _index = 0;
 NSArray *arr = @[@"2.jpg",@"3.jpg",@"4.jpg"];
 // 循环创建3张扑克牌
 for (int i = 0; i < 3; i++) {
  PockerView *pocker = [[PockerView alloc]initWithFrame:CGRectMake(100 + 80 * i, 100, 100, 150) imageName:arr[i]];
  pocker.tag = 1000 + i;
  [self.view addSubview:pocker];
 }
}

 

// 点击空白处触发
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
 // 执行动画
 [self executeAnimation];
}


// 执行动画
- (void)executeAnimation{
 // 根据tag值取到扑克牌
 PockerView *pocker = [self.view viewWithTag:1000+ _index];
 // 方法一
 [self animationWithView:pocker];
 // 方法二
// [self rotateWithView:pocker];
}

// 翻牌动画方法一(内部实现还是方法二)
- (void)animationWithView:(PockerView *)view{
 // 延时方法 正在翻转的牌翻转一半的时候把它移到视图最上面来
 [self performSelector:@selector(delayAction:) withObject:view afterDelay:_duration / 2];

 // 翻转动画
 UIViewAnimationOptions option = UIViewAnimationOptionTransitionFlipFromLeft;
 [UIView transitionWithView:view      duration:_duration
      options:option
     animations:^ {
      [view.imgview1 removeFromSuperview];
      [view addSubview:view.imgview2];
     }
     completion:^(BOOL finished){
      _index++;
      if (_index < 3) {
       [self executeAnimation];
      }
 }];
}

// 延时方法
- (void)delayAction:(UIView *)view{
 [self.view bringSubviewToFront:view];
}


- (void)delayAction2{
 _index++;
 if (_index < 3) {
  [self executeAnimation];
 }
}


// 方法二
- (void)rotateWithView:(PockerView *)view{

 [self performSelector:@selector(delayAction:) withObject:view afterDelay:_duration / 2];
 [self performSelector:@selector(delayAction2) withObject:nil afterDelay:_duration];
 [UIView beginAnimations:@"aa" context:nil];
 [UIView setAnimationDuration:_duration];
 [UIView setAnimationCurve:UIViewAnimationCurveLinear];
 [view.imgview1 removeFromSuperview];
 [view addSubview:view.imgview2];
 [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view cache:NO];
 [UIView commitAnimations];
}
@end

PockerView.h文件代码

//
// PockerView.h
// 翻牌
//
// Created by 斌 on 2017/4/20.
// Copyright © 2017年 斌. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface PockerView : UIView

@property(nonatomic,strong)UIImageView *imgview1;
@property(nonatomic,strong)UIImageView *imgview2;

- (instancetype)initWithFrame:(CGRect)frame imageName:(NSString *)imageName;

@end

PockerView.m文件代码

//
// PockerView.m
// 翻牌
//
// Created by 斌 on 2017/4/20.
// Copyright © 2017年 斌. All rights reserved.
//

#import "PockerView.h"

@implementation PockerView

- (instancetype)initWithFrame:(CGRect)frame imageName:(NSString *)imageName{
 self = [super initWithFrame:frame];
 if (self) {

  // 设置阴影
  self.layer.shadowColor = [UIColor blackColor].CGColor;
  self.layer.shadowOffset = CGSizeMake(-10, 0);
  self.layer.shadowOpacity = 0.3;

  // 牌的背面
  self.imgview1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
  _imgview1.backgroundColor = [UIColor redColor];
  _imgview1.image = [UIImage imageNamed:@"1.jpeg"];
  [self addSubview:_imgview1];
  self.imgview1.layer.cornerRadius = 10;
  self.imgview1.clipsToBounds = YES;
  self.imgview1.layer.borderWidth = 5;
  self.imgview1.layer.borderColor = [[UIColor whiteColor] CGColor];

  // 牌的正面
  self.imgview2 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
  _imgview2.backgroundColor = [UIColor redColor];
  _imgview2.image = [UIImage imageNamed:imageName];
  self.imgview2.layer.cornerRadius = 10;
  self.imgview2.clipsToBounds = YES;
  self.imgview2.layer.borderWidth = 5;
  self.imgview2.layer.borderColor = [[UIColor whiteColor] CGColor];
 }
 return self;
}
@end

github链接地址:https://github.com/jiangbin1993/pockerRotateAnimation.git

本地下载地址:http://xiazai.jb51.net/201707/yuanma/pockerRotateAnimation(jb51.net).rar

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 简单谈谈c/c++中#import、#include和@class的区别

    简单谈谈c/c++中#import、#include和@class的区别

    对于#import,我想做过iOS开发的人应该都不陌生。在开发过程中,当我们需要声明某一个类时,都需要去引用。而#imclude的话,在我们学习C时就已经知道了,他的作用也是引用声明的意思。在表面上他们的作用似乎都是一样的。但是在具体功能实现方式上,还是有着很大的区别。
    2018-01-01
  • iOS开发之手势识别

    iOS开发之手势识别

    本文给大家汇总介绍了在IOS开发中我们经常需要用到的手势识别的相关知识,非常的细致全面,有需要的小伙伴可以参考下
    2016-04-04
  • iOS 11 AppIcon不显示问题小结

    iOS 11 AppIcon不显示问题小结

    小编在更新xcode9后,在运行老项目时遇到iOS 11 AppIcon不显示问题,下面小编大家分享一下我的思路,需要的朋友参考下吧
    2017-10-10
  • iOS自定义水平滚动条、进度条

    iOS自定义水平滚动条、进度条

    这篇文章主要为大家详细介绍了iOS自定义水平滚动条、进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • iOS架构从 MVC、MVP 到 MVVM

    iOS架构从 MVC、MVP 到 MVVM

    这篇文章主要介绍了iOS架构从MVC、MVP到MVVM,文章关于MVC设计模式以及架构等均介绍的非常详细,需要的朋友可以作为参考
    2023-03-03
  • iOS MRC 下 block 循环引用问题实例讲解

    iOS MRC 下 block 循环引用问题实例讲解

    本文通过文字说明加代码的形式给大家介绍了iOS MRC 下 block 循环引用问题,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-12-12
  • iOS开发之级联界面(推荐界面)搭建原理

    iOS开发之级联界面(推荐界面)搭建原理

    这篇文章主要为大家详细介绍了iOS级联界面(推荐界面)搭建原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • iOS10实现推送功能时的注意点和问题总结

    iOS10实现推送功能时的注意点和问题总结

    很多朋友都反馈,发现了iOS9升级到iOS10推送功能不正常的问题,所以这篇文章总结了一下要点,亲们可以根据以下步骤,逐步排查问题,也可以逐步实现iOS10的推送功能。下面来一起看看吧。
    2016-09-09
  • iOS WKWebview 白屏检测实现的示例

    iOS WKWebview 白屏检测实现的示例

    这篇文章主要介绍了iOS WKWebview 白屏检测实现的示例,帮助大家更好的进行ios开发,感兴趣的朋友可以了解下
    2020-10-10
  • iOS对象指针和基础数据类型的强转详解

    iOS对象指针和基础数据类型的强转详解

    最近在做一些小功能,忽然发现有的基础数据转换居然都忘记了。于是想着要赶紧整理下记下来!本文就是记录的一些内容,主要介绍了iOS中对象指针和基础数据类型的强转,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11

最新评论