亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

視圖收起動畫

2019-11-09 16:17:36
字體:
來源:轉載
供稿:網友

最近在寫項目集成即時通訊,音視頻修改成類似QQ中收起的動畫效果:

動畫代碼比較簡單,效果:

動畫View添加到window中為了方便可以不管到什么控制器都可以懸浮展示,

根據demo大致寫了下代碼:

//

//  ShowContentView.h

#import <UIKit/UIKit.h>

#import <AVFoundation/AVFoundation.h>

@interface ShowContentView :UIView<CAAnimationDelegate>

@PRoperty (nonatomic,strong)UIView *headView;

@property (nonatomic,strong)UIButton *clicBtn;

/** 動畫用的layer */

@property (strong,nonatomic)CAShapeLayer *shapeLayer;

@property (nonatomic,strong)UIButton *smallBtn;

@end

//

//  ShowContentView.m

#import "ShowContentView.h"

@implementation ShowContentView

- (instancetype)initWithFrame:(CGRect)frame

{

    if (self = [superinitWithFrame:frame]) {

        UIView *headView = [[UIViewalloc]initWithFrame:CGRectMake(0,0, 120,120)];

        headView.center =CGPointMake(self.center.x,130);

        [headView setBackgroundColor:[UIColorredColor]];

        headView.layer.cornerRadius =60;

        headView.clipsToBounds =YES;

        self.clipsToBounds =YES;

        self.headView = headView;

        [selfaddSubview:headView];

        

        UIButton *btn = [UIButtonbuttonWithType:UIButtonTypeCustom];

        btn.frame =CGRectMake(30, [UIScreenmainScreen].bounds.size.height-80, [UIScreen mainScreen].bounds.size.width - 60, 30);

        [btn setBackgroundColor:[UIColorredColor]];

        [btn setTitle:@"點我"forState:UIControlStateNormal];

        self.clicBtn = btn;

        [btn addTarget:selfaction:@selector(btnclickAction:)forControlEvents:UIControlEventTouchUpInside];

        [selfaddSubview:btn];

    }

    returnself;

}

- (void)btnclickAction:(UIButton *)btn

{

    //開始的圓形

    UIBezierPath *endPath = [UIBezierPathbezierPathWithOvalInRect:self.headView.frame];

    CGSize startSize =CGSizeMake(self.frame.size.width * 0.5, self.frame.size.height-self.headView.center.y);

    CGFloat radius =sqrt(startSize.width*startSize.width+startSize.height*startSize.height);

    CGRect statF =CGRectInset(self.headView.frame, -radius, -radius);

    UIBezierPath *startPath = [UIBezierPathbezierPathWithOvalInRect:statF];

    

    CAShapeLayer *shapLayer = [CAShapeLayerlayer];

    shapLayer.path = endPath.CGPath;

    self.layer.mask = shapLayer;

    self.shapeLayer = shapLayer;

    //動畫

    CABasicAnimation *pathAnimation = [CABasicAnimationanimationWithKeyPath:@"path"];

    pathAnimation.fromValue = (id)startPath.CGPath;

    pathAnimation.toValue = (id)endPath.CGPath;

    pathAnimation.duration =0.5;

    pathAnimation.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaSEOut];

    pathAnimation.delegate =self;

    pathAnimation.removedOnCompletion =NO;

    pathAnimation.fillMode =kCAFillModeForwards;

    

    [shapLayer addAnimation:pathAnimationforKey:@"shapAnmination"];

}

#pragma mark - CAAnimationDelegate

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag

{

    if ([animisEqual:[self.shapeLayeranimationForKey:@"shapAnmination"]]) {

        CGRect rect =self.frame;

        rect.origin =self.headView.frame.origin;

        self.bounds = rect;

        rect.size =self.headView.frame.size;

        self.frame = rect;

        

        [UIViewanimateWithDuration:1.0animations:^{

            self.center =CGPointMake([UIScreenmainScreen].bounds.size.width - 60, [UIScreenmainScreen].bounds.size.height - 80);

            self.transform =CGAffineTransformMakeScale(0.5,0.5);

            

        } completion:^(BOOL finished) {

            self.smallBtn.frame =self.frame;

            self.smallBtn.layer.cornerRadius = self.smallBtn.bounds.size.width * 0.5;

            self.smallBtn.layer.masksToBounds = YES;

            [self.superviewaddSubview:_smallBtn];

        }];

    } elseif ([anim isEqual:[self.shapeLayeranimationForKey:@"showAnimation"]]) {

        self.layer.mask =nil;

        self.shapeLayer =nil;

    }

}

- (UIButton *)smallBtn

{

    if (!_smallBtn) {

        _smallBtn = [UIButtonbuttonWithType:UIButtonTypeCustom];

        [_smallBtnaddTarget:selfaction:@selector(microClick)forControlEvents:UIControlEventTouchUpInside];

    }

    return_smallBtn;

}

- (void)microClick

{

    [self.smallBtnremoveFromSuperview];

    self.smallBtn =nil;

    

    [UIViewanimateWithDuration:1.0animations:^{

        self.center =self.headView.center;

        self.transform =CGAffineTransformIdentity;

    } completion:^(BOOL finished) {

        self.bounds = [UIScreenmainScreen].bounds;

        self.frame =self.bounds;

        

        CAShapeLayer *shapeLayer =self.shapeLayer;

        

        // 1.獲取動畫縮放開始時的圓形

        UIBezierPath *startPath = [UIBezierPathbezierPathWithOvalInRect:self.headView.frame];

        

        // 2.獲取動畫縮放結束時的圓形

        CGSize endSize =CGSizeMake(self.frame.size.width * 0.5, self.frame.size.height - self.headView.center.y);

        CGFloat radius =sqrt(endSize.width * endSize.width + endSize.height * endSize.height);

        CGRect endRect =CGRectInset(self.headView.frame, -radius, -radius);

        UIBezierPath *endPath = [UIBezierPathbezierPathWithOvalInRect:endRect];

        

        // 3.創建shapeLayer作為視圖的遮罩

        shapeLayer.path = endPath.CGPath;

        

        // 添加動畫

        CABasicAnimation *pathAnimation = [CABasicAnimationanimationWithKeyPath:@"path"];

        pathAnimation.fromValue = (id)startPath.CGPath;

        pathAnimation.toValue = (id)endPath.CGPath;

        pathAnimation.duration =0.5;

        pathAnimation.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];

        pathAnimation.delegate =self;

        pathAnimation.removedOnCompletion =NO;

        pathAnimation.fillMode =kCAFillModeForwards;

        

        [shapeLayer addAnimation:pathAnimationforKey:@"showAnmination"];

    }];

}

@end

//

//  ViewController.m

//

#import "ViewController.h"

#import "ShowContentView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    [self.viewsetBackgroundColor:[UIColorgreenColor]];

    ShowContentView *showView = [[ShowContentViewalloc]initWithFrame:self.view.frame];

    [showView setBackgroundColor:[UIColorlightGrayColor]];

    [self.viewaddSubview:showView];

}

@end


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品少妇网址| 亚洲精品97久久| 国产成人av在线播放| 18一19gay欧美视频网站| 中文国产成人精品久久一| 欧美在线观看www| 国产区精品视频| 欧美大胆a视频| 国产精品大片wwwwww| 在线国产精品视频| 色婷婷综合久久久久中文字幕1| 国外视频精品毛片| 夜夜嗨av色综合久久久综合网| 一区二区三区视频免费| 一区二区三区四区精品| 亚洲缚视频在线观看| 国产成人精品亚洲精品| 亚洲日韩欧美视频| 国产精品免费网站| 日韩精品高清在线| 伊人亚洲福利一区二区三区| 国产欧美久久久久久| 精品国产一区二区三区久久久狼| 亚洲女同精品视频| 日韩一区二区av| 欧美午夜www高清视频| 伊人久久大香线蕉av一区二区| 中文字幕日韩免费视频| 欧美性资源免费| 久久久国产精品亚洲一区| 欧美极度另类性三渗透| 插插插亚洲综合网| 欧美激情亚洲国产| 97久久精品人人澡人人爽缅北| 久久久黄色av| 精品福利视频导航| 久久精品99久久久香蕉| 欧美精品性视频| 国产成人精品在线播放| 亚洲天堂av在线免费| 国产精品扒开腿做| 97国产精品视频人人做人人爱| 久久久久久久久久久网站| 国产精品国产亚洲伊人久久| 日本老师69xxx| 欧美多人乱p欧美4p久久| 红桃视频成人在线观看| 欧美麻豆久久久久久中文| 91高潮精品免费porn| 欧美国产精品va在线观看| 日韩视频中文字幕| 日韩中文字幕精品| 97久久精品人人澡人人爽缅北| 国产91精品不卡视频| 亚洲第一在线视频| 国产精品久久77777| 97在线精品视频| 国产有码在线一区二区视频| 欧美—级a级欧美特级ar全黄| 伊人激情综合网| 97国产suv精品一区二区62| 精品国内产的精品视频在线观看| 日韩欧美国产激情| 亚洲成人网在线| 在线国产精品播放| 欧美激情中文字幕乱码免费| 1769国内精品视频在线播放| 一本色道久久88亚洲综合88| 欧美日韩一区免费| 欧美精品videossex性护士| 亚洲天堂影视av| 欧美福利视频在线| 亚洲bt天天射| 日本在线观看天堂男亚洲| 国产精品99久久久久久人| 欧美精品18videosex性欧美| 日本人成精品视频在线| 久久久国产精品亚洲一区| 欧美精品在线第一页| 91夜夜未满十八勿入爽爽影院| 日韩成人激情视频| 成人福利网站在线观看| 成人精品aaaa网站| 亚洲精品一二区| 91成人在线视频| 亚洲有声小说3d| 国产不卡一区二区在线播放| 国产成人精品免费视频| 中文国产成人精品久久一| 国产精品va在线| 日韩影视在线观看| 精品无人区太爽高潮在线播放| 久热在线中文字幕色999舞| 国产精品爽爽ⅴa在线观看| 国产精自产拍久久久久久| 欧美成人精品在线视频| 国产精品91视频| 91久久久久久| 欧美在线一区二区三区四| 亚洲偷欧美偷国内偷| 日韩精品视频免费| 欧美电影在线观看网站| 91高清视频在线免费观看| 午夜免费日韩视频| 亚洲一区中文字幕| 欧美裸体xxxxx| 日韩av在线播放资源| 国产精品亚洲综合天堂夜夜| 亚洲午夜精品视频| 日韩视频中文字幕| 亚洲人成啪啪网站| 精品无人国产偷自产在线| 国产精品第10页| 久久久久女教师免费一区| 成人免费淫片视频软件| 91成人性视频| 欧美大片网站在线观看| 亚洲成人av在线| 中文字幕欧美日韩在线| 这里只有精品视频在线| 国产亚洲精品久久久久动| 日本久久精品视频| 国产成人高潮免费观看精品| 日韩美女毛茸茸| 精品福利免费观看| 日韩中文字幕精品| 久久91亚洲人成电影网站| 91精品久久久久久久久久另类| 欧美性猛交xxxx| 久久深夜福利免费观看| 国产综合在线观看视频| 91精品一区二区| 久久频这里精品99香蕉| 久久国产精品影视| 国语自产精品视频在线看| 国产亚洲精品综合一区91| 成人欧美一区二区三区黑人| 欧美国产日韩视频| 亚洲一级一级97网| 97视频免费在线观看| 久久人人爽人人| 国产精品久久99久久| 亚洲福利视频网| 久久人人爽人人爽人人片av高清| 欧美一区二粉嫩精品国产一线天| 国产精品一区二区久久| 欧美在线观看一区二区三区| 精品久久久中文| 成人444kkkk在线观看| 欧美午夜精品久久久久久久| 成人啪啪免费看| 免费av一区二区| 伊人成人开心激情综合网| 91国产视频在线| 国产精品视频专区| 日韩成人免费视频| 中文字幕亚洲综合| 精品香蕉在线观看视频一| 久久99视频免费| 精品欧美激情精品一区| 91久久久亚洲精品| 91精品中国老女人| 国产精品久久久久久久久久久久| 亚洲18私人小影院|