最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年11月23日 10:51:16   作者:Cloudox_  
這篇文章主要為大家詳細介紹了iOS點擊查看大圖的動畫效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

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

這樣看其實還蠻簡單的,下面看代碼怎么實現(xiàn)。

首先我們定義三個屬性,因為我們需要在多個方法中調用,所以定義為類的@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];
}

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

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

// 大圖視圖
- (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;
}

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

// 顯示大圖
- (void)viewBigImage {
 [self bigImageView];// 初始化大圖

 // 讓大圖從小圖的位置和大小開始出現(xiàn)
 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;// 設置中心位置到新的位置
 }];

 // 延遲執(zhí)行,移動回后再消滅掉
 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;
 });
}

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

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

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

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

相關文章

  • iOS App開發(fā)中使cell高度自適應的黑魔法詳解

    iOS App開發(fā)中使cell高度自適應的黑魔法詳解

    這篇文章主要介紹了iOS App開發(fā)中使cell高度自適應的黑魔法詳解,作者利用iOS8以后的新特性講解了TableView、CollectionView中的cell高度自適應以及UITextView輸入內容實時更新cell高度的方法,需要的朋友可以參考下
    2016-03-03
  • iOS自定義相機實現(xiàn)拍照、錄制視頻

    iOS自定義相機實現(xiàn)拍照、錄制視頻

    這篇文章主要為大家詳細介紹了iOS自定義相機實現(xiàn)拍照、錄制視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • iOS 四種回調方法總結

    iOS 四種回調方法總結

    這篇文章主要介紹了iOS 四種回調方法總結的相關資料,需要的朋友可以參考下
    2016-10-10
  • iOS開發(fā)實現(xiàn)下載器的基本功能(1)

    iOS開發(fā)實現(xiàn)下載器的基本功能(1)

    這篇文章主要為大家詳細介紹了iOS開發(fā)實現(xiàn)下載器基本功能的相關資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • iOS源碼閱讀必備知識之Tagged Pointer

    iOS源碼閱讀必備知識之Tagged Pointer

    這篇文章主要給大家介紹了關于iOS源碼閱讀必備知識之Tagged Pointer的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • iOS中自動實現(xiàn)對象序列化的方法詳解

    iOS中自動實現(xiàn)對象序列化的方法詳解

    這篇文章主要給大家介紹了在iOS中自動實現(xiàn)對象序列化的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • IOS10 配置權限詳細介紹

    IOS10 配置權限詳細介紹

    這篇文章主要介紹了IOS10 配置權限詳細介紹的相關資料,訪問相機、相冊、麥克風、通訊錄等等權限,都需要進行相關的配置,不然會直接crash,需要的朋友可以參考下
    2016-12-12
  • IOS 中UITextField和UITextView中字符串為空和空格的解決辦法

    IOS 中UITextField和UITextView中字符串為空和空格的解決辦法

    這篇文章主要介紹了IOS 中UITextField和UITextView中字符串為空和空格的解決辦法的相關資料,需要的朋友可以參考下
    2017-07-07
  • 實例講解iOS中的UIPageViewController翻頁視圖控制器

    實例講解iOS中的UIPageViewController翻頁視圖控制器

    UIPageViewController更像是一個視圖容器,將每頁不同的ViewController整合,這里我們將以實例講解iOS中的UIPageViewController翻頁視圖控制器:
    2016-06-06
  • iOS開發(fā)之路--微博骨架搭建

    iOS開發(fā)之路--微博骨架搭建

    本文是IOS開發(fā)之路的第四篇,主要講訴如何一步步搭建起微博的骨架,并附上源碼,希望對大家的IOS開發(fā)能提供些借鑒
    2014-08-08

最新評論

上杭县| 商丘市| 上饶市| 房山区| 昌平区| 西藏| 富顺县| 噶尔县| 休宁县| 绥芬河市| 偏关县| 龙陵县| 齐河县| 思南县| 文安县| 郸城县| 库车县| 洞口县| 和静县| 定州市| 东城区| 张北县| 南汇区| 梅河口市| 西畴县| 资溪县| 团风县| 钟山县| 金平| 凤翔县| 元谋县| 河池市| 乌兰浩特市| 安溪县| 武穴市| 永年县| 礼泉县| 沂源县| 东乡| 邵武市| 邵阳市|