图片碎片化mask动画
生活随笔
收集整理的這篇文章主要介紹了
图片碎片化mask动画
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖片碎片化mask動畫
?
效果
?
源碼
https://github.com/YouXianMing/Animations
// // TransformFadeViewController.m // Animations // // Created by YouXianMing on 15/11/17. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import "TransformFadeViewController.h" #import "TranformFadeView.h" #import "GCD.h"typedef enum : NSUInteger {TYPE_ONE,TYPE_TWO,} EType;@interface TransformFadeViewController ()@property (nonatomic, strong) TranformFadeView *tranformFadeViewOne; @property (nonatomic, strong) TranformFadeView *tranformFadeViewTwo;@property (nonatomic, strong) GCDTimer *timer; @property (nonatomic) EType type;@property (nonatomic, strong) NSArray *images; @property (nonatomic) NSInteger count;@end@implementation TransformFadeViewController- (void)viewDidLoad {[super viewDidLoad]; }- (void)setup {[super setup];self.images = @[[UIImage imageNamed:@"1"],[UIImage imageNamed:@"2"],[UIImage imageNamed:@"3"],[UIImage imageNamed:@"4"],[UIImage imageNamed:@"5"]];// 圖片1self.tranformFadeViewOne = [[TranformFadeView alloc] initWithFrame:self.view.bounds];self.tranformFadeViewOne.contentMode = UIViewContentModeScaleAspectFill;self.tranformFadeViewOne.image = [self currentImage];self.tranformFadeViewOne.verticalCount = 2;self.tranformFadeViewOne.horizontalCount = 12;self.tranformFadeViewOne.center = self.view.center;[self.tranformFadeViewOne buildMaskView];self.tranformFadeViewOne.fadeDuradtion = 1.f;self.tranformFadeViewOne.animationGapDuration = 0.1f;[self.view addSubview:self.tranformFadeViewOne];// 圖片2self.tranformFadeViewTwo = [[TranformFadeView alloc] initWithFrame:self.view.bounds];self.tranformFadeViewTwo.contentMode = UIViewContentModeScaleAspectFill;self.tranformFadeViewTwo.verticalCount = 2;self.tranformFadeViewTwo.horizontalCount = 12;self.tranformFadeViewTwo.center = self.view.center;[self.tranformFadeViewTwo buildMaskView];self.tranformFadeViewTwo.fadeDuradtion = 1.f;self.tranformFadeViewTwo.animationGapDuration = 0.1f;[self.view addSubview:self.tranformFadeViewTwo];[self.tranformFadeViewTwo fadeAnimated:YES];// timerself.timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];[self.timer event:^{if (self.type == TYPE_ONE) {self.type = TYPE_TWO;[self.view sendSubviewToBack:self.tranformFadeViewTwo];self.tranformFadeViewTwo.image = [self currentImage];[self.tranformFadeViewTwo showAnimated:NO];[self.tranformFadeViewOne fadeAnimated:YES];} else {self.type = TYPE_ONE;[self.view sendSubviewToBack:self.tranformFadeViewOne];self.tranformFadeViewOne.image = [self currentImage];[self.tranformFadeViewOne showAnimated:NO];[self.tranformFadeViewTwo fadeAnimated:YES];}} timeIntervalWithSecs:6];[self.timer start]; }- (UIImage *)currentImage {self.count = ++self.count % self.images.count;return self.images[self.count]; }@end // // TranformFadeView.h // TransformationFadeView // // Created by XianMingYou on 15/4/16. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import <UIKit/UIKit.h>@interface TranformFadeView : UIView/*** Image顯示方式*/ @property (nonatomic) UIViewContentMode contentMode;/*** 要顯示的相片*/ @property (nonatomic, strong) UIImage *image;/*** 垂直方向方塊的個數*/ @property (nonatomic) NSInteger verticalCount;/*** 水平的個數*/ @property (nonatomic) NSInteger horizontalCount;/*** 開始構造出作為mask用的view*/ - (void)buildMaskView;/*** 漸變動畫的時間*/ @property (nonatomic) NSTimeInterval fadeDuradtion;/*** 兩個動畫之間的時間間隔*/ @property (nonatomic) NSTimeInterval animationGapDuration;/*** 開始隱藏動畫** @param animated 是否執行動畫*/ - (void)fadeAnimated:(BOOL)animated;/*** 開始顯示動畫** @param animated 時候執行動畫*/ - (void)showAnimated:(BOOL)animated;@end // // TranformFadeView.m // TransformationFadeView // // Created by XianMingYou on 15/4/16. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import "TranformFadeView.h"#define STATR_TAG 0x19871220@interface TranformFadeView ()/*** 圖片*/ @property (nonatomic, strong) UIImageView *imageView;/*** 所有的maskView*/ @property (nonatomic, strong) UIView *allMaskView;/*** maskView的個數*/ @property (nonatomic) NSInteger maskViewCount;/*** 存儲maskView的編號*/ @property (nonatomic, strong) NSMutableArray *countArray;@end@implementation TranformFadeView/*** 初始化并添加圖片** @param frame frame值*/ - (void)initImageViewWithFrame:(CGRect)frame {self.imageView = [[UIImageView alloc] initWithFrame:frame];self.imageView.layer.masksToBounds = YES;[self addSubview:self.imageView]; }- (instancetype)initWithFrame:(CGRect)frame {if (self = [super initWithFrame:frame]) {[self initImageViewWithFrame:self.bounds];}return self; }- (void)buildMaskView {// 如果沒有,就返回空if (self.horizontalCount < 1 || self.verticalCount < 1) {return;}// 承載所有的maskViewself.allMaskView = [[UIView alloc] initWithFrame:self.bounds];self.maskView = self.allMaskView;// 計算出每個view的尺寸CGFloat height = self.frame.size.height;CGFloat width = self.frame.size.width;CGFloat maskViewHeight = self.verticalCount <= 1 ? height : (height / self.verticalCount);CGFloat maskViewWidth = self.horizontalCount <= 1 ? width : (width / self.horizontalCount);// 用以計數int count = 0;// 先水平循環,再垂直循環for (int horizontal = 0; horizontal < self.horizontalCount; horizontal++) {for (int vertical = 0; vertical < self.verticalCount; vertical++) {CGRect frame = CGRectMake(maskViewWidth * horizontal,maskViewHeight * vertical,maskViewWidth,maskViewHeight);UIView *maskView = [[UIView alloc] initWithFrame:frame];maskView.frame = frame;maskView.tag = STATR_TAG + count;maskView.backgroundColor = [UIColor blackColor];[self.allMaskView addSubview:maskView];count++;}}self.maskViewCount = count;// 存儲self.countArray = [NSMutableArray array];for (int i = 0; i < self.maskViewCount; i++) {[self.countArray addObject:@(i)];} }/*** 策略模式一** @param inputNumber 輸入** @return 輸出*/ - (NSInteger)strategyNormal:(NSInteger)inputNumber {NSNumber *number = self.countArray[inputNumber];return number.integerValue; }- (void)fadeAnimated:(BOOL)animated {if (animated == YES) {for (int i = 0; i < self.maskViewCount; i++) {UIView *tmpView = [self maskViewWithTag:[self strategyNormal:i]];[UIView animateWithDuration:(self.fadeDuradtion <= 0.f ? 1.f : self.fadeDuradtion)delay:i * (self.animationGapDuration <= 0.f ? 0.2f : self.animationGapDuration)options:UIViewAnimationOptionCurveLinearanimations:^{tmpView.alpha = 0.f;} completion:^(BOOL finished) {}];}} else {for (int i = 0; i < self.maskViewCount; i++) {UIView *tmpView = [self maskViewWithTag:i];tmpView.alpha = 0.f;}} }- (void)showAnimated:(BOOL)animated {if (animated == YES) {for (int i = 0; i < self.maskViewCount; i++) {UIView *tmpView = [self maskViewWithTag:[self strategyNormal:i]];[UIView animateWithDuration:(self.fadeDuradtion <= 0.f ? 1.f : self.fadeDuradtion)delay:i * (self.animationGapDuration <= 0.f ? 0.2f : self.animationGapDuration)options:UIViewAnimationOptionCurveLinearanimations:^{tmpView.alpha = 1.f;} completion:^(BOOL finished) {}];}} else {for (int i = 0; i < self.maskViewCount; i++) {UIView *tmpView = [self maskViewWithTag:i];tmpView.alpha = 1.f;}} }/*** 根據tag值獲取maskView** @param tag maskView的tag值** @return tag值對應的maskView*/ - (UIView *)maskViewWithTag:(NSInteger)tag {return [self.maskView viewWithTag:tag + STATR_TAG]; }#pragma mark - setter & getter. @synthesize contentMode = _contentMode; - (void)setContentMode:(UIViewContentMode)contentMode {_contentMode = contentMode;self.imageView.contentMode = contentMode; }- (UIViewContentMode)contentMode {return _contentMode; }@synthesize image = _image; - (void)setImage:(UIImage *)image {_image = image;self.imageView.image = image; }- (UIImage *)image {return _image; }@end?
細節
使用的時候動態切換圖片就可以了,實際上只需要創建出2個view.
?
轉載于:https://www.cnblogs.com/YouXianMing/p/4972445.html
總結
以上是生活随笔為你收集整理的图片碎片化mask动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 最佳实践
- 下一篇: 怎样转换不同的pdf文件