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

首頁 > 系統 > iOS > 正文

iOS點擊查看大圖的動畫效果

2020-07-26 03:04:22
字體:
來源:轉載
供稿:網友

對于圖片來說,除了表情包,幾乎都會被點擊查看大圖。今天就講解一個查看和收起大圖的動畫效果,先直接看效果圖:

如圖所示,最開始是一個小圖,點擊小圖可以查看大圖。大圖會從小圖的位置和大小“彈”出來,同時背景變成半透明的陰影。點擊大圖或者陰影后,收起大圖,同樣地彈回到小圖去,同時去掉陰影背景,就像是一張圖片在伸大縮小一樣。

現在看看這是怎么實現的。在思考一個動畫的實現方法時,把動畫的動作進行分解然后再一個個去思考怎么實現是一個好的習慣,我們稍微分解一下,這個動畫在顯示大圖和收起大圖的時候做了這些事情:

  • 打開時先顯示一個半透明的陰影背景;
  • 然后顯示一個逐漸變大的圖片,直到撐到屏幕的邊界;
  • 收起時先讓陰影背景消失;
  • 然后將圖片逐漸收小到小圖原本的大小。

這樣看其實還蠻簡單的,下面看代碼怎么實現。

首先我們定義三個屬性,因為我們需要在多個方法中調用,所以定義為類的@property:

@property (nonatomic, strong) UIImageView *smallImageView;// 小圖視圖@property (nonatomic, strong) UIImageView *bigImageView;// 大圖視圖@property (nonatomic, strong) UIView *bgView;// 陰影視圖

然后我們將小圖片直接添加到界面上去:

- (void)viewDidLoad { [super viewDidLoad]; // 小圖 self.smallImageView = [[UIImageView alloc] initWithFrame:CGRectMake((SCREENWIDTH - 100)/2, (SCREENHEIGHT - 100)/2, 100, 100)]; self.smallImageView.image = [UIImage imageNamed:@"icon"]; // 添加點擊響應 self.smallImageView.userInteractionEnabled = YES; UITapGestureRecognizer *imageTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewBigImage)]; [self.smallImageView addGestureRecognizer:imageTap]; [self.view addSubview:self.smallImageView];}

注意這里我在設置小圖的大小時用到了兩個事先設好的常量:屏幕的高和寬,這樣就會根據手機的屏幕大小來保證圖片始終是居中顯示的,關于這兩個常量,可以查看我這篇博客:iOS獲取屏幕寬高、設備型號、系統版本信息

好現在小圖已經添加到界面上了,我們也給小圖添加了響應點擊的方法,只需要在響應方法中實現動畫就可以了。但是在這之前,我們先來完成大圖片和陰影背景的初始化:

// 大圖視圖- (UIImageView *)bigImageView { if (nil == _bigImageView) { _bigImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, (SCREENHEIGHT - SCREENWIDTH) / 2, SCREENWIDTH, SCREENWIDTH)]; [_bigImageView setImage:self.smallImageView.image]; // 設置大圖的點擊響應,此處為收起大圖 _bigImageView.userInteractionEnabled = YES; UITapGestureRecognizer *imageTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissBigImage)]; [_bigImageView addGestureRecognizer:imageTap]; } return _bigImageView;}// 陰影視圖- (UIView *)bgView { if (nil == _bgView) { _bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREENWIDTH, SCREENHEIGHT)]; _bgView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; // 設置陰影背景的點擊響應,此處為收起大圖 _bgView.userInteractionEnabled = YES; UITapGestureRecognizer *bgTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissBigImage)]; [_bgView addGestureRecognizer:bgTap]; } return _bgView;}

可以看到我們單獨使用了兩個方法來初始化大圖和陰影背景,大圖的大小設為了垂直居中,寬度正好與屏幕一致,高度與寬度相同,是個正方形。陰影背景則是占據整個屏幕。同時,我也設置了兩個視圖的點擊相應方法,都是收起大圖的動畫方法,我們之后再去實現?,F在,我們可以來著手實現顯示大圖的動畫了。

// 顯示大圖- (void)viewBigImage { [self bigImageView];// 初始化大圖 // 讓大圖從小圖的位置和大小開始出現 CGRect originFram = _bigImageView.frame; _bigImageView.frame = self.smallImageView.frame; [self.view addSubview:_bigImageView]; // 動畫到大圖該有的大小 [UIView animateWithDuration:0.3 animations:^{ // 改變大小 _bigImageView.frame = originFram; // 改變位置 _bigImageView.center = self.view.center;// 設置中心位置到新的位置 }]; // 添加陰影視圖 [self bgView]; [self.view addSubview:_bgView]; // 將大圖放到最上層,否則會被后添加的陰影蓋住 [self.view bringSubviewToFront:_bigImageView];}

看代碼,我們首先調用了大圖的初始化方法,但是注意,此時還并沒有將大圖添加到界面上,如果這時候添加,就會直接顯示大圖了,在此之前,我們先保存了大圖自身的尺寸,然后將其尺寸位置設為和小圖完全一樣,然后才將它添加到界面上,從小圖的位置和尺寸,去動畫到大圖原本的尺寸,看起來就像是小圖放大成了大圖一樣對吧。這里的動畫我們使用的是最簡單的iOS 7開始支持的基于block的UIView動畫,在我的這篇博客中也有詳細講解:iOS基礎動畫教程

然后,我們初始化了陰影背景視圖,并添加到界面上,此時不要忘記,要再次將大圖手動推送到最上層,否則是會被后添加的陰影視圖覆蓋的。

到此,顯示大圖的動畫就結束了,挺簡單的吧,接下來我們看收起大圖的動畫,基本就是把上面的步驟倒過來了一次。

// 收起大圖- (void)dismissBigImage { [self.bgView removeFromSuperview];// 移除陰影 // 將大圖動畫回小圖的位置和大小 [UIView animateWithDuration:0.3 animations:^{ // 改變大小 _bigImageView.frame = self.smallImageView.frame; // 改變位置 _bigImageView.center = self.smallImageView.center;// 設置中心位置到新的位置 }]; // 延遲執行,移動回后再消滅掉 double delayInSeconds = 0.3; __block ViewController* bself = self; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [bself.bigImageView removeFromSuperview]; bself.bigImageView = nil; bself.bgView = nil; });}

我們先移除陰影背景,然后將大圖動畫回小圖的尺寸和位置,看起來就像是縮小成了小圖一樣。然后我們使用了一個延遲函數,確保在圖片收縮回小圖以后,再將圖片移除界面,保證動畫的效果。

至此,就完成了我們整個的動畫了。這個例子中圖片是中規中矩地放在居中位置,你也可以試一下將小圖放在其他位置,其實真實的app中很少有居中放置的,從別的地方伸縮放大縮小效果會更加有趣的。當然了,如果小圖的位置不好獲取,那就直接設為從屏幕的中點開始縮放,效果也不錯。另外,你可能會疑惑為什么我要另行添加一個大圖的對象,而不直接對小圖的尺寸進行動畫呢?其實是完全可以的,只是在我的工程中有這個需求,所以我就直接拿過來講了哈哈哈。

這里是我的示例工程:https://github.com/Cloudox/ViewBigImageDemo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久国产精品99gif| 日韩成人免费视频| 色小说视频一区| 国产精品欧美亚洲777777| 永久免费毛片在线播放不卡| 色婷婷av一区二区三区在线观看| 亚洲高清久久久久久| 在线午夜精品自拍| 欧美成人在线免费| 亚洲二区中文字幕| 亚洲最大成人免费视频| 日韩av黄色在线观看| 在线观看不卡av| 中文字幕一区二区精品| 欧美成人免费在线观看| 日韩在线免费观看视频| 久久网福利资源网站| 成人深夜直播免费观看| 岛国精品视频在线播放| 亚洲国产精品久久久久秋霞蜜臀| 国产精品美腿一区在线看| 日韩成人av在线| 亚洲伊人成综合成人网| 久久久亚洲欧洲日产国码aⅴ| 国产精品视频大全| 日韩免费黄色av| 国产精品久久久久久久久男| 国产精品视频白浆免费视频| 国产精品永久免费在线| 欧美自拍视频在线观看| 成人乱人伦精品视频在线观看| 欧美激情欧美激情在线五月| 国产精品美女无圣光视频| 成人黄色午夜影院| 国产亚洲xxx| www.久久久久| 欧美人与物videos| 国产日本欧美一区二区三区在线| 亚洲一区二区日本| 亚洲理论电影网| 影音先锋欧美在线资源| 国产精品久久久久久网站| 91精品视频在线| 色偷偷噜噜噜亚洲男人的天堂| 97视频色精品| 韩国一区二区电影| 久久久国产一区| 国产精自产拍久久久久久蜜| 日韩美女写真福利在线观看| 亚洲自拍偷拍视频| 欧美黑人狂野猛交老妇| 日韩a**站在线观看| 亚洲欧美国产日韩中文字幕| 久热爱精品视频线路一| 国产精品草莓在线免费观看| 69精品小视频| 国产精品日韩在线一区| 亚洲性线免费观看视频成熟| 夜夜嗨av色综合久久久综合网| 国产精品视频久久久久| 国模私拍一区二区三区| 亚洲精品电影网在线观看| 亚洲天堂男人天堂女人天堂| 萌白酱国产一区二区| 久久91精品国产91久久久| 日韩欧美福利视频| 欧美日韩中文字幕| 欧美又大粗又爽又黄大片视频| 国产一区欧美二区三区| 久久精品91久久久久久再现| 成人在线国产精品| 欧美激情综合色| 日韩激情视频在线| 国产丝袜一区二区三区免费视频| 亚洲视频欧美视频| 日韩在线中文视频| 亚洲人成人99网站| 欧美极品美女视频网站在线观看免费| 日韩欧美中文字幕在线播放| 久久久女人电视剧免费播放下载| 97视频在线观看成人| 国产日韩欧美在线播放| 国产成人高潮免费观看精品| 国产日韩在线亚洲字幕中文| 国外日韩电影在线观看| 欧美午夜www高清视频| 正在播放欧美视频| 国产精品日韩在线播放| 韩国美女主播一区| 亚洲第一精品夜夜躁人人爽| 性色av一区二区三区免费| 国产亚洲欧美日韩美女| 日本伊人精品一区二区三区介绍| 国产精品高潮视频| 午夜欧美大片免费观看| 日韩高清人体午夜| 国产999精品久久久| 91美女福利视频高清| 国产亚洲精品美女| 2019中文字幕全在线观看| 日韩av在线免费播放| 亚洲精品美女久久久久| 色无极亚洲影院| 成人黄色短视频在线观看| 久久五月情影视| 亚洲国产欧美自拍| 5566日本婷婷色中文字幕97| 亚洲人成电影在线观看天堂色| 91精品免费看| 久久综合色88| 亚洲欧美综合图区| 色狠狠久久aa北条麻妃| 91香蕉嫩草影院入口| 国产午夜精品一区二区三区| 亚洲精品99久久久久| 欧美丰满老妇厨房牲生活| 国产自产女人91一区在线观看| 91久久久久久| 欧美精品成人91久久久久久久| 最新国产成人av网站网址麻豆| 亚洲国产精品成人va在线观看| 亚洲国产精品久久久久久| 91精品91久久久久久| 91免费的视频在线播放| 亚洲乱码av中文一区二区| 成人免费激情视频| 日韩av在线网站| 中文字幕在线成人| 亚洲女在线观看| 激情亚洲一区二区三区四区| 久久久免费在线观看| 欧美成人在线免费| 精品免费在线视频| 高清一区二区三区日本久| 久久精品国产一区二区三区| 91成人在线观看国产| 日韩电影中文字幕在线| 日韩精品久久久久| 少妇激情综合网| 日韩成人中文电影| 日韩精品免费在线| 国产精品99导航| 91美女高潮出水| 亚洲国产精品国自产拍av秋霞| 国产91精品不卡视频| 国产精品视频精品| 国产在线精品自拍| 亚洲国产精品va在线看黑人动漫| 日韩在线观看免费全| 亚洲欧美在线一区| 欧美最猛性xxxxx亚洲精品| 日韩电影中文字幕在线观看| 日韩精品极品在线观看播放免费视频| 日韩av中文字幕在线播放| 欧美日韩在线一区| 国产欧美精品一区二区三区介绍| 有码中文亚洲精品| 国产精品欧美一区二区三区奶水| 日韩视频精品在线| 亚洲成人久久久久| 国产伊人精品在线| 亚洲成人网久久久| 欧美激情久久久久久| 美日韩精品免费视频|