分享

两个View翻转显示

 九辰夕 2016-04-14
=========================================
今天闲来无事,写了一个代码小片段。先上图看看效果吧,图片截的不是太好请见谅!
 

=========================================
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);
不太了解的可以去看看【iOS学习】UIView动画

下面说一下思路吧:
相对上面的九宫格来说,每格铺了3层view,其实感觉自己也挺菜,高大上的方法不知道,哪位大神知道,请不吝赐教:QQ:3294287647前景视图frontview,后景视图backView,还有他们二位共同的superView。然后利用上面的UIView动画,再加些控制即可。

首先,我们new一个 FlipView继承自UIView。
FlipView.h 文件中代码如下:

 #import <UIKit/UIKit.h>


typedef NS_ENUM(NSInteger, ViewFlipType)

{

    ViewFlipTypeLeftAndRight, //左右翻转

    ViewFlipTypeTopAndBottom,  //上下翻转

    ViewFlipTypeCurlUpAndDown //上下卷翻

};


@interface FlipView : UIView

//前景视图,背景色默认白色

@property(nonatomic,strong)UIView*frontView;

//后景视图,背景色默认白色

@property(nonatomic,strong)UIView*backView;

//是否开始翻转,默认NO

@property(nonatomic)BOOL isBeginFlip;

//翻转类型(默认左右)

@property(nonatomic)ViewFlipType flipType;

@end


FlipView.m 文件中代码如下:
 #import "FlipView.h"


@interface FlipView ()


@property(nonatomic)BOOL goingToFrontView;


@end



@implementation FlipView

-(instancetype)initWithFrame:(CGRect)frame

{

    if (self=[super initWithFrame:frame]) {

        //前景视图和后景视图的默认颜色

        self.backView.backgroundColor=[UIColor whiteColor];

        self.frontView.backgroundColor=[UIColor whiteColor];

        self.goingToFrontView=NO;

    }

    return self;

}

-(void)setFrontView:(UIView *)frontView

{

    if (!_frontView) {

        _frontView=frontView;

        [self addSubview:frontView];

        //注意刚开始前景视图一定要在上面

        [self bringSubviewToFront:self.frontView];

    }

}

-(void)setBackView:(UIView *)backView

{

    if (!_backView) {

        _backView=backView;

        [self addSubview:backView];

        //注意刚开始前景视图一定要在上面

        [self bringSubviewToFront:self.frontView];

    }

}

//翻转动画

-(void)setIsBeginFlip:(BOOL)isBeginFlip

{

    self.goingToFrontView = !self.goingToFrontView;

    UIViewAnimationOptions transitionDirection=[self getSelfFlipDirection];

    

    UIView *fromView = self.goingToFrontView ? self.frontView : self.backView;

    UIView *toView = self.goingToFrontView ? self.backView : self.frontView;


    [UIView transitionFromView:fromView

                        toView:toView

                      duration:1.0

                       options:transitionDirection

                    completion:^(BOOL finished) {

                        

                    }];

}

-(void)setFlipType:(ViewFlipType)flipType

{

    _flipType=flipType;

}

//翻转方向

-(UIViewAnimationOptions)getSelfFlipDirection

{

    if (self.flipType==ViewFlipTypeTopAndBottom) {

        return self.goingToFrontView ? UIViewAnimationOptionTransitionFlipFromTop : UIViewAnimationOptionTransitionFlipFromBottom;

    }else if (self.flipType==ViewFlipTypeCurlUpAndDown)

    {

        return self.goingToFrontView?UIViewAnimationOptionTransitionCurlUp:UIViewAnimationOptionTransitionCurlDown;

    }

    return self.goingToFrontView ? UIViewAnimationOptionTransitionFlipFromLeft : UIViewAnimationOptionTransitionFlipFromRight;

}

@end



之后,我们在自己的viewcontroller里添加如下代码
 - (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    self.view.backgroundColor=[UIColor whiteColor];

    self.title=@"春节";

    

    NSArray*array=@[@"春联",@"鞭炮",@"饺子",@"除夕",@"春晚",@"拜年",@"压岁钱",@"熬年",@"拜财神"];

    CGFloat ww=ScreenWidth/3.0;

    for (int j=0; j<3; j++) {

        for (int i=0; i<3; i++) {

            FlipView*view=[[FlipView alloc]initWithFrame:CGRectMake(ww*i,NavHeight+ww*j, 80, 80)];

            view.center=CGPointMake(ww*i+ww/2.0, NavHeight+ww*j+ww/2.0);

            view.backgroundColor=[UIColor whiteColor];

            [self.view addSubview:view];

            

            UIView*backView=[[UIView alloc]initWithFrame:view.bounds];

            backView.backgroundColor=[UIColor whiteColor];

            UIView*frontView=[[UIView alloc]initWithFrame:view.bounds];

            frontView.backgroundColor=[UIColor whiteColor];

            

            

            UIButton*button=[UIButton buttonWithType:(UIButtonTypeSystem)];

            button.frame=view.bounds;

            [button setTitle:array[j*3+i] forState:(UIControlStateNormal)];

            button.tag=100+j*3+i;

            view.tag=button.tag+100;

            [button addTarget:self action:@selector(buttonClick:) forControlEvents:(UIControlEventTouchUpInside)];

            

            [backView addSubview:button];

            view.backView=backView;

            

            

            UIImageView*imgView=[[UIImageView alloc]initWithFrame:CGRectMake(18, 18, 44, 44)];

            imgView.image=[UIImage imageNamed:array[j*3+i]];

            imgView.userInteractionEnabled=YES;

            imgView.tag=button.tag+200;

            UITapGestureRecognizer*tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGestureAction:)];

            [imgView addGestureRecognizer:tapGesture];

            

            [frontView addSubview:imgView];

            view.frontView=frontView;

        

            if (j==0) {

                view.flipType=ViewFlipTypeCurlUpAndDown;

                view.backView.backgroundColor=[UIColor purpleColor];

                view.frontView.backgroundColor=[UIColor redColor];

            }else if (j==1)

            {

                view.flipType=ViewFlipTypeLeftAndRight;

                view.backView.backgroundColor=[UIColor brownColor];

                view.frontView.backgroundColor=[UIColor blueColor];

            }else

            {

                view.flipType=ViewFlipTypeTopAndBottom;

                view.backView.backgroundColor=[UIColor magentaColor];

                view.frontView.backgroundColor=[UIColor cyanColor];

            }

            

            

        }

    }

}

-(void)tapGestureAction:(UITapGestureRecognizer*)tap

{

    UIImageView*imgView=(UIImageView*)tap.view;

    FlipView*view=[self.view viewWithTag: imgView.tag-100];

      //view翻转

    view.isBeginFlip=YES;

}

-(void)buttonClick:(UIButton*)button

{

     FlipView*view=[self.view viewWithTag: button.tag+100];

       //view翻转

    view.isBeginFlip=YES;

}




 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多