日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

触控(Touch) 、 布局(Layout)

發布時間:2023/11/27 生活经验 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 触控(Touch) 、 布局(Layout) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 使用觸控實現一個簡易的畫板

1.1 問題

觸控(Touch)是一個UITouch類型的對象,當用戶觸摸了屏幕上的視圖時自動被創建,通常使用觸控實現繪圖、涂鴉、手寫等功能。本案例使用觸控實現一個簡易的畫板,可以在畫板上勾畫出一條線,如圖-1所示:

圖-1

1.2 方案

首先在創建好的SingleViewApplication項目中創建一個畫板類TRDrawView,繼承至UIView,該類有一個NSMutableArray類型的屬性points,用于存儲手指觸摸的軌跡也就是點。

其次在Stroyboard的場景中拖放一個View控件,和屏幕一樣大小,然后將View的類型修改為TRDrawView。

然后在TRDrawView類中通過touchesBegan:、touchesMoved:方法獲取到手指的觸摸點,將點存儲到points數組中。

最后在TRDrawView類中重寫drawRect方法,該方法中根據手指的觸摸軌跡points進行屏幕繪制。切記要在touchesMoved方法中調用setNeedDisplay刷新界面。

1.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:創建項目和畫板類

首先在創建好的SingleViewApplication項目中創建一個畫板類TRDrawView,繼承至UIView,該類有一個NSMutableArray類型的屬性points,用于存儲手指觸摸的軌跡也就是點,代碼如下所示:

  1. @interface?TRDrawView?()
  2. @property?(strong, nonatomic)?NSMutableArray?*points;
  3. @end

然后從對象庫中拖放一個View控件到Storyboard場景中,View控件的大小和屏幕一樣。在右邊欄的檢查器三將View的類型設置為TRDrawView,如圖-2所示:

圖-2

步驟二:在TRDawView中獲取手指觸摸軌跡

在TRDrawView類中首先重寫touchesBegan:,在該方法將points屬性進行初始化,并獲取當前手指的觸摸點,存儲到points數組中,代碼如下所示:

  1. -?(void)touchesBegan:(NSSet?*)touches?withEvent:(UIEvent?*)event
  2. {
  3. //初始化數組
  4. self.points?=?[@[]mutableCopy];
  5. //獲取當前觸摸點
  6. UITouch?*touch?=?[touches?anyObject];
  7. CGPoint?point?=?[touch?locationInView:self];
  8. //將點放進數組中
  9. NSValue?*value?=?[NSValue?valueWithCGPoint:point];
  10. [self.points?addObject:value];
  11. }

然后再重寫touchesMove:方法,在該方法中繼續獲取手指的當前觸摸點,并將觸摸點存儲到points數組中,代碼如下所示:

  1. -?(void)touchesMoved:(NSSet?*)touches?withEvent:(UIEvent?*)event
  2. {
  3. //獲取當前觸摸點
  4. UITouch?*touch?=?[touches?anyObject];
  5. CGPoint?point?=?[touch?locationInView:self];
  6. //將點放進數組中
  7. NSValue?*value?=?[NSValue?valueWithCGPoint:point];
  8. [self.points?addObject:value];
  9. }

步驟三:重寫drawRect方法,進行屏幕繪制

在TRDrawView類中重寫drawRect方法,該方法中根據手指的觸摸軌跡points進行屏幕繪制,代碼如下所示:

  1. -?(void)drawRect:(CGRect)rect
  2. {
  3. UIBezierPath?*path?=?[UIBezierPath?bezierPath];
  4. NSValue?*value?=?[self.points?firstObject];
  5. [path?moveToPoint:[value?CGPointValue]];
  6. for?(NSValue?*value?in?self.points)?{
  7. [path?addLineToPoint:[value?CGPointValue]];
  8. }
  9. path.lineWidth?=?4;
  10. [[UIColor?redColor]setStroke];
  11. [path?stroke];
  12. }

最后要在touchesMoved:和touchesEnded:方法中調用setNeedDisplay刷新界面,代碼如下所示:

  1. -?(void)touchesMoved:(NSSet?*)touches?withEvent:(UIEvent?*)event
  2. {
  3. //獲取當前觸摸點
  4. UITouch?*touch?=?[touches?anyObject];
  5. CGPoint?point?=?[touch?locationInView:self];
  6. //將點放進數組中
  7. NSValue?*value?=?[NSValue?valueWithCGPoint:point];
  8. [self.points?addObject:value];
  9. //刷新界面
  10. [self?setNeedsDisplay];
  11. }
  12. -?(void)touchesEnded:(NSSet?*)touches?withEvent:(UIEvent?*)event
  13. {
  14. [self?setNeedsDisplay];
  15. }

1.4 完整代碼

本案例中,TRDrawView.m文件中的完整代碼如下所示:

代碼

2 使用純代碼進行界面布局

2.1 問題

純代碼布局就是重寫布局方法viewDidLayoutSubviews,在該方法內部計算每個子視圖的frame屬性。本案例將學習如何使用純代碼進行布局,使界面上的Button和Label控件始終保持在固定的位置,如圖-3、圖-4所示:

圖-3

圖-4

2.2 方案

首先創建一個SingleViewApplication項目,將自動布局功能關閉。

在Stroyboard的場景中拖放兩個Button控件和一個Label控件,Button放置在屏幕的上方,并且大小一樣,Label控件放置在屏幕的右下角。

然后在TRViewController類中重寫布局方法viewDidLayoutSubviews,在該方法中根據父視圖的bounds計算Button和Label的frame。

2.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:創建項目,添加控件

首先創建一個SingleViewApplication項目,在右邊欄的檢查器一中將自動布局功能關閉,如圖-5所示:

圖-5

在Stroyboard的場景中拖放兩個Button控件和一個Label控件,Button放置在屏幕的上方,并且大小一樣,Label控件放置在屏幕的右下角,如圖-6所示:

圖-6

步驟二:重寫布局方法viewDidLayoutSubviews,進行界面布局

將Storyboard中的Button控件和Label控件關聯成TRViewController的私有屬性,代碼如下所示:

  1. @interface?TRViewController?()
  2. @property?(weak, nonatomic)?IBOutlet?UIButton?*button1;
  3. @property?(weak, nonatomic)?IBOutlet?UIButton?*button2;
  4. @property?(weak, nonatomic)?IBOutlet?UILabel?*label;
  5. @end

在TRViewController類中重寫布局方法viewDidLayoutSubviews,在該方法中根據父視圖的bounds計算Button和Label的frame,代碼如下所示:

  1. -?(void)viewDidLayoutSubviews
  2. {
  3. [super viewDidLayoutSubviews];
  4. CGFloat?buttonWidth?=?(self.view.bounds.size.width?-?20?-?20?-?10)?*?0.5;
  5. CGRect?frame?=?CGRectMake(20, self.button1.frame.origin.y, buttonWidth,?40);
  6. self.button1.frame?= frame;
  7. frame?=?CGRectMake(self.button1.frame.size.width+30, self.button2.frame.origin.y, buttonWidth,?40);
  8. self.button2.frame?= frame;
  9. frame?= self.label.frame;
  10. self.label.frame?=?CGRectMake(self.view.bounds.size.width-20-frame.size.width, self.view.bounds.size.height-20-frame.size.height, frame.size.width, frame.size.height);
  11. }

2.4 完整代碼

本案例中,TRViewController.m文件中的完整代碼如下所示:

  1. #import?"TRViewController.h"
  2. @interface?TRViewController?()
  3. @property?(weak, nonatomic)?IBOutlet?UIButton?*button1;
  4. @property?(weak, nonatomic)?IBOutlet?UIButton?*button2;
  5. @property?(weak, nonatomic)?IBOutlet?UILabel?*label;
  6. @end
  7. @implementation TRViewController
  8. -?(void)viewDidLayoutSubviews
  9. {
  10. [super viewDidLayoutSubviews];
  11. CGFloat?buttonWidth?=?(self.view.bounds.size.width?-?20?-?20?-?10)?*?0.5;
  12. CGRect?frame?=?CGRectMake(20, self.button1.frame.origin.y, buttonWidth,?40);
  13. self.button1.frame?= frame;
  14. frame?=?CGRectMake(self.button1.frame.size.width+30, self.button2.frame.origin.y, buttonWidth,?40);
  15. self.button2.frame?= frame;
  16. frame?= self.label.frame;
  17. self.label.frame?=?CGRectMake(self.view.bounds.size.width-20-frame.size.width, self.view.bounds.size.height-20-frame.size.height, frame.size.width, frame.size.height);
  18. }
  19. @end
?

3 根據上邊欄和下邊欄的高度進行布局

3.1 問題

從iOS7開始,視圖控制器會滲透到各種Bar下面,包括:NavigationBar、ToolBar、TabBar、StatusBar等;這些Bar會擠占視圖的空間,在布局時就需要根據各種Bar所擠占的空間大小來計算控件的frame,本案例直接在上一個案例的基礎上實現,根據上邊欄和下邊欄的高度對界面進行布局,如圖-7、圖-8所示:

圖-7

圖-8

3.2 方案

首先在上一個案例的基礎上增加一個NavigationController和TabBarController,在界面的中間拖放一個Button控件,標題設置為“隱藏NavigationBar”,并將Button控件關聯成TRViewController的私有方法hideNavigationBar。

然后在TRViewController類中重寫布局方法viewDidLayoutSubviews,在該方法中根據父視圖的bounds和上下邊欄的高度計算Button和Label的frame。

3.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:創建項目,添加按鈕控件

在上一個案例的基礎上增加一個NavigationController和TabBarController,在界面的中間拖放一個Button控件,標題設置為“隱藏NavigationBar”,如圖-9所示:

圖-9

然后將Button控件關聯成TRViewController的私有方法hideNavigationBar,該方法的功能是將導航欄隱藏或顯示,代碼如下所示:

  1. -?(IBAction)hideNavigationBar
  2. {
  3. self.navigationController.navigationBarHidden?=?!self.navigationController.navigationBarHidden;
  4. }

步驟二:重寫布局方法viewDidLayoutSubviews,進行界面布局

在TRViewController類中重寫布局方法viewDidLayoutSubviews,在該方法中根據先通過屬性self.topLayoutGuide.length和self.bottomLayoutGuide.length獲取到上下邊欄的高度,然后再通過父視圖的bounds和上下邊欄的高度計算出Button和Label的frame,代碼如下所示:

  1. -?(void)viewDidLayoutSubviews
  2. {
  3. [super viewDidLayoutSubviews];
  4. CGFloat?buttonWidth?=?(self.view.bounds.size.width?-?20?-?20?-?10)?*?0.5;
  5. //從iOS7開始,可以隨時知道VC的上面和下面被各種Bar占據了多少的空間
  6. CGFloat?top?= self.topLayoutGuide.length;
  7. CGRect?frame?=?CGRectMake(20, top+10, buttonWidth,?40);
  8. self.button1.frame?= frame;
  9. frame.origin.x?+= buttonWidth?+?10;
  10. self.button2.frame?= frame;
  11. //下面的各種Bar(TabBar或ToolBar)占了VC多高的空間
  12. CGFloat?bottom?= self.bottomLayoutGuide.length;
  13. frame?= self.label.frame;
  14. frame?=?CGRectMake(self.view.bounds.size.width?-?20?- frame.size.width?, self.view.bounds.size.height?-?10?- frame.size.height?- bottom, frame.size.width, frame.size.height);
  15. self.label.frame?= frame;
  16. frame?= self.hideButton.frame;
  17. frame.origin.x?= self.view.bounds.size.width?*?0.5?- frame.size.width?*?0.5;
  18. frame.origin.y?= self.view.bounds.size.height?*?0.5?- frame.size.height?*?0.5;
  19. self.hideButton.frame?= frame;
  20. }

3.4 完整代碼

本案例中,TRViewController.m文件中的完整代碼如下所示:

  1. #import?"TRViewController.h"
  2. @interface?TRViewController?()
  3. @property?(weak, nonatomic)?IBOutlet?UIButton?*button1;
  4. @property?(weak, nonatomic)?IBOutlet?UIButton?*button2;
  5. @property?(weak, nonatomic)?IBOutlet?UILabel?*label;
  6. @property?(weak, nonatomic)?IBOutlet?UIButton?*hideButton;
  7. @end
  8. @implementation TRViewController
  9. -?(IBAction)hideNavigationBar
  10. {
  11. self.navigationController.navigationBarHidden?=?!self.navigationController.navigationBarHidden;
  12. }
  13. -?(void)viewDidLayoutSubviews
  14. {
  15. [super viewDidLayoutSubviews];
  16. CGFloat?buttonWidth?=?(self.view.bounds.size.width?-?20?-?20?-?10)?*?0.5;
  17. //從iOS7開始,可以隨時知道VC的上面和下面被各種Bar占據了多少的空間
  18. CGFloat?top?= self.topLayoutGuide.length;
  19. CGRect?frame?=?CGRectMake(20, top+10, buttonWidth,?40);
  20. self.button1.frame?= frame;
  21. frame.origin.x?+= buttonWidth?+?10;
  22. self.button2.frame?= frame;
  23. //下面的各種Bar(TabBar或ToolBar)占了VC多高的空間
  24. CGFloat?bottom?= self.bottomLayoutGuide.length;
  25. frame?= self.label.frame;
  26. frame?=?CGRectMake(self.view.bounds.size.width?-?20?- frame.size.width?, self.view.bounds.size.height?-?10?- frame.size.height?- bottom, frame.size.width, frame.size.height);
  27. self.label.frame?= frame;
  28. frame?= self.hideButton.frame;
  29. frame.origin.x?= self.view.bounds.size.width?*?0.5?- frame.size.width?*?0.5;
  30. frame.origin.y?= self.view.bounds.size.height?*?0.5?- frame.size.height?*?0.5;
  31. self.hideButton.frame?= frame;
  32. }
  33. @end

4 演示繪制圖形的布局

4.1 問題

使用純代碼布局并且AutoLayout關閉的狀態下,在drawRect方法中繪制的圖形,在視圖大小發生變化時圖形會失真,本案例學習繪制圖形的布局如圖-10,圖-11所示:

圖-10

圖-11

4.2 方案

首先在創建好的項目中將自動布局功能關閉,再創建一個TRView類,繼承至UIView。

其次在Stroyboard的場景中拖放一個View控件,和屏幕一樣大小,然后將View的類型修改為TRView。

然后在TRView類中重寫drawRect方法,在屏幕左上方繪制一個三角形。

最后將TRView的contentMode屬性設置成Redraw,即可實現繪制的布局,屏幕切換或者變化繪制的圖形也不會失真。

4.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:創建TRView類,繪制圖像

首先在創建好的項目中將自動布局功能關閉,創建一個TRView類,繼承至UIView,用于繪制圖形。在Storyboard中拖放一個View控件,和屏幕同等大小,并將View的類型修改為TRView,如圖-12所示:

圖-12

然后將View控件關聯成TRViewController的私有屬性myView,代碼如下所示:

  1. @interface?TRViewController?()
  2. @property?(weak, nonatomic)?IBOutlet?TRView?*myView;
  3. @end

最后在TRView類中重寫drawRect方法,在屏幕左上方繪制一個三角形,代碼如下所示:

  1. -?(void)drawRect:(CGRect)rect
  2. {
  3. UIBezierPath?*path?=?[UIBezierPath?bezierPath];
  4. [path?moveToPoint:CGPointMake(20,?20)];
  5. [path?addLineToPoint:CGPointMake(20,?120)];
  6. [path?addLineToPoint:CGPointMake(120,?20)];
  7. [path?closePath];
  8. path.lineWidth?=?4;
  9. [[UIColor?redColor] setStroke];
  10. [path?stroke];
  11. }

步驟二:進行繪制布局

完成繪制代碼,運行程序可見屏幕左上方有一個三角形,但是當切換成橫屏時發現三角形失真,如圖-13所示:

圖-13

解決的辦法是,當視圖大小發生變化時,進行重新繪制圖形,即在布局方法viewDidLayoutSubviews里面調用setNeedDisplay方法即可,代碼如下所示:

  1. -?(void)viewDidLayoutSubviews
  2. {
  3. [super viewDidLayoutSubviews];
  4. [self.myView?setNeedsDisplay];
  5. }

但是通常直接將myView的contentMode屬性設置為Redraw即可實現繪制布局,相當于調用了上面的代碼,將myView的contentMode屬性設置為Redraw有兩個方法,第一種可以直接通過代碼設置,代碼如下所示:

  1. -?(void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. self.myView.contentMode?= UIViewContentModeRedraw;
  5. }

第二種方法可以直接在Stroyboard中設置,右邊欄的檢查器四中將Mode選項設置為Redraw即可,如圖-14所示:

圖-14

將contentMode設置為Redraw之后就不需要再寫布局代碼,此時切換屏幕繪制圖形就不會失真了。

4.4 完整代碼

本案例中,TRViewController.m文件中的完整代碼如下所示:

  1. #import?"TRViewController.h"
  2. #import?"TRView.h"
  3. @interface?TRViewController?()
  4. @property?(weak, nonatomic)?IBOutlet?TRView?*myView;
  5. @end
  6. @implementation TRViewController
  7. -?(void)viewDidLoad
  8. {
  9. [super viewDidLoad];
  10. self.myView.contentMode?= UIViewContentModeRedraw;
  11. }
  12. //- (void)viewDidLayoutSubviews
  13. //{
  14. // [super viewDidLayoutSubviews];
  15. // [self.myView setNeedsDisplay];
  16. //}
  17. @end
?

本案例中,TRView.m文件中的完整代碼如下所示:

  1. #import?"TRView.h"
  2. @implementation TRView
  3. -?(void)drawRect:(CGRect)rect
  4. {
  5. UIBezierPath?*path?=?[UIBezierPath?bezierPath];
  6. [path?moveToPoint:CGPointMake(20,?20)];
  7. [path?addLineToPoint:CGPointMake(20,?120)];
  8. [path?addLineToPoint:CGPointMake(120,?20)];
  9. [path?closePath];
  10. path.lineWidth?=?4;
  11. [[UIColor?redColor] setStroke];
  12. [path?stroke];
  13. }
  14. @end
?

5 對樂庫項目的播放列表單元格進行布局

5.1 問題

視圖自身也可以使用布局方法layoutSubviews對自己的子視圖進行布局,本案例使用視圖的layoutSubviews方法給樂庫項目的播放列表單元格進行布局,如圖-15所示:

圖-15

5.2 方案

首先創建一個SingleViewApplication項目,將Xcode自帶的TRViewController類刪除,創建一個TRMusicsTableViewController類,繼承至UITableViewController,該類有一個NSArray類型的屬性musics用于存儲歌曲數據源。

再將Storyboard中自帶的場景刪除,拖放一個TableViewController到界面中,嵌入一個NavigaitionController。在右邊欄的檢查器中將TableViewController設置為動態表視圖,并和TRMusicsTableViewController類進行綁定。

其次創建一個帶有xib的TRMusicCell類,繼承至UITableViewCell,在xib文件中進行自定義cell,往cell的contentView視圖上拖放所需要的控件。

首先在cell的上方拖放一個Label控件,用于顯示歌曲的名字。在cell的下方依次拖放兩個ImageView控件和兩個Label控件,兩個ImageView控件分別用于表示歌曲是否為本地歌曲和是否高清。兩個Label控件分別用于顯示歌曲的信息和時長。

調整好cell上面各個控件的大小,將個控件關聯為TRMusicCell的屬性musicNameLabel、albumAndArtistLabel、durationLabel、downloadedImageView以及hdImageView。

然后再創建一個TRMusic類用于存儲歌曲的相關信息,該類繼承至NSObject,有五個屬性,分別為:

NSString類型的name,用于記錄歌曲名稱;

NSString類型的album,用于記錄歌曲所屬專輯;

NSString類型的artist,用于記錄歌曲的演唱者;

NSString類型的duration,用于記錄歌曲的時長;

BOOL類型的highQuality和downloaded,分別用于記錄是否高清和是否本地下載。

我們創建一個TRMusicGroup類,用于生成一組模擬的歌曲數據。

最后在TRMusicCell類中定義一個TRMusic類型屬性music,用于存儲單元格需要展示的歌曲。重寫layoutSubviews方法,進行cell的界面布局,該方法中會根據每首歌曲的信息,計算子視圖的frame進行布局。

在TRMusicTableViewController類注冊Cell,回答三問給表視圖加載歌曲數據。

5.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:創建播放列表項目

首先創建一個SingleViewApplication項目,將Xcode自帶的TRViewController類刪除,創建一個TRMusicsTableViewController類,繼承至UITableViewController,該類有一個NSArray類型的屬性musics用于存儲歌曲數據源,代碼如下所示:

  1. @interface?TRMusicTableViewController?: UITableViewController
  2. @property?(strong, nonatomic)?NSArray?*musics;
  3. @end

然后將Storyboard中自帶的場景刪除,拖放一個TableViewController到界面中,嵌入一個NavigaitionController。在右邊欄的檢查器中將TableViewController設置為動態表視圖,并和TRMusicsTableViewController類進行綁定,如圖-16所示:

圖-16

為了能更靈活的使用自定義cell,由于本案例使用xib的方式進行自定義cell,所以將Storyboard中表視圖自帶的cell對象刪除,如圖-17所示:

圖-17

步驟二:創建TRMusicCell類,自定義Cell

首先創建一個帶有xib的TRMusicCell類,繼承至UITableViewCell,在xib文件中進行自定義cell,往cell的contentView視圖上拖放所需要的控件。

先在cell的上方拖放一個Label控件,用于顯示歌曲的名字。

再在cell的下方依次拖放兩個ImageView控件和兩個Label控件,兩個ImageView控件分別用于表示歌曲是否為本地歌曲和是否高清。兩個Label控件分別用于顯示歌曲的信息和時長。

設置好cell上面各個控件的大小和屬性,如圖-18所示:

圖-18

最后將cell上的各個控件關聯為TRMusicCell的屬性musicNameLabel、albumAndArtistLabel、durationLabel、downloadedImageView以及hdImageView,代碼如下所示:

  1. @interface?TRMusicCell?()
  2. @property?(weak, nonatomic)?IBOutlet?UILabel?*musicNameLabel;
  3. @property?(weak, nonatomic)?IBOutlet?UILabel?*albumAndArtistLabel;
  4. @property?(weak, nonatomic)?IBOutlet?UILabel?*durationLabel;
  5. @property?(weak, nonatomic)?IBOutlet?UIImageView?*downloadedImageView;
  6. @property?(weak, nonatomic)?IBOutlet?UIImageView?*hdImageView;
  7. @end

步驟三:創建TRMusic類和歌曲模擬數據

首先創建一個TRMusic類用于存儲歌曲的相關信息,該類繼承至NSObject,有五個屬性,分別為:

NSString類型的name,用于記錄歌曲名稱;

NSString類型的album,用于記錄歌曲所屬專輯;

NSString類型的artist,用于記錄歌曲的演唱者;

NSString類型的duration,用于記錄歌曲的時長;

BOOL類型的highQuality和downloaded,分別用于記錄是否高清和是否本地下載。

代碼如下所示:

  1. @interface?TRMusic?: NSObject
  2. @property?(nonatomic, copy) NSString?* name;
  3. @property?(nonatomic, copy) NSString?* album;
  4. @property?(nonatomic, copy) NSString?* artist;
  5. @property?(nonatomic)?NSTimeInterval?duration;
  6. @property?(nonatomic)?BOOL?highQuality;
  7. @property?(nonatomic)?BOOL?downloaded;
  8. @end

然后再創建一個TRMusicGroup類,該類提供一個靜態方法fakeData,用于生成一組模擬的歌曲數據,代碼如下所示:

  1. +?(NSArray?*) fakeData
  2. {
  3. NSMutableArray?* musics?= nil;
  4. TRMusic?* music?= nil;
  5. musics?=?[NSMutableArray?array];
  6. music?=?[[TRMusic?alloc] init];
  7. music.name?= @"Burn";
  8. music.album?= @"Burn - Single";
  9. music.artist?= @"Ellie Goulding";
  10. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  11. music.downloaded?= YES;
  12. music.highQuality?= NO;
  13. [musics?addObject:music];
  14. music?=?[[TRMusic?alloc] init];
  15. music.name?= @"Summertime Sadness (Cedric Gervais Remix)";
  16. music.album?= @"Summertime Sadness (Cedric Gervais Remix) - Single";
  17. music.artist?= @"Lana Del Rey";
  18. music.duration?=?[self?durationWithMinutes:6 andSeconds:52];
  19. music.downloaded?= YES;
  20. music.highQuality?= YES;
  21. [musics?addObject:music];
  22. music?=?[[TRMusic?alloc] init];
  23. music.name?= @"Spectrum";
  24. music.album?= @"Clarity";
  25. music.artist?= @"Zedd";
  26. music.duration?=?[self?durationWithMinutes:4 andSeconds:3];
  27. music.downloaded?= YES;
  28. music.highQuality?= YES;
  29. [musics?addObject:music];
  30. music?=?[[TRMusic?alloc] init];
  31. music.name?= @"It's Time";
  32. music.album?= @"It’s Time";
  33. music.artist?= @"Imagine Dragons";
  34. music.duration?=?[self?durationWithMinutes:4 andSeconds:0];
  35. music.downloaded?= NO;
  36. music.highQuality?= YES;
  37. [musics?addObject:music];
  38. music?=?[[TRMusic?alloc] init];
  39. music.name?= @"Dancing in The Moonlight";
  40. music.album?= @"Dancing In The Moonlight: The Best Of Toploader";
  41. music.artist?= @"Toploader";
  42. music.duration?=?[self?durationWithMinutes:3 andSeconds:53];
  43. music.downloaded?= YES;
  44. music.highQuality?= YES;
  45. [musics?addObject:music];
  46. music?=?[[TRMusic?alloc] init];
  47. music.name?= @"Thinking About You (feat. Ayah Marar)";
  48. music.album?= @"18 Months (Deluxe Edition)";
  49. music.artist?= @"Calvin Harris";
  50. music.duration?=?[self?durationWithMinutes:4 andSeconds:8];
  51. music.downloaded?= YES;
  52. music.highQuality?= YES;
  53. [musics?addObject:music];
  54. music?=?[[TRMusic?alloc] init];
  55. music.name?= @"You Make Me (feat. Salem Al Fakir)";
  56. music.album?= @"True";
  57. music.artist?= @"Avicii";
  58. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  59. music.downloaded?= YES;
  60. music.highQuality?= NO;
  61. [musics?addObject:music];
  62. music?=?[[TRMusic?alloc] init];
  63. music.name?= @"Safe and Sound";
  64. music.album?= @"Capital Cities EP";
  65. music.artist?= @"Capital Cities";
  66. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  67. music.downloaded?= YES;
  68. music.highQuality?= NO;
  69. [musics?addObject:music];
  70. music?=?[[TRMusic?alloc] init];
  71. music.name?= @"Reaching Out";
  72. music.album?= @"Welcome Reality (Deluxe Version)";
  73. music.artist?= @"nero";
  74. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  75. music.downloaded?= YES;
  76. music.highQuality?= NO;
  77. [musics?addObject:music];
  78. music?=?[[TRMusic?alloc] init];
  79. music.name?= @"Recover";
  80. music.album?= @"Recover - EP";
  81. music.artist?= @"CHVRCHES";
  82. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  83. music.downloaded?= YES;
  84. music.highQuality?= NO;
  85. [musics?addObject:music];
  86. music?=?[[TRMusic?alloc] init];
  87. music.name?= @"Hold On, We're Going Home (feat. Majid Jordan)";
  88. music.album?= @"Hold On, We're Going Home (feat. Majid Jordan) - Single";
  89. music.artist?= @"Drake";
  90. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  91. music.downloaded?= YES;
  92. music.highQuality?= NO;
  93. [musics?addObject:music];
  94. music?=?[[TRMusic?alloc] init];
  95. music.name?= @"The Mother We Share";
  96. music.album?= @"The Mother We Share - Single";
  97. music.artist?= @"CHVRCHES";
  98. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  99. music.downloaded?= YES;
  100. music.highQuality?= NO;
  101. [musics?addObject:music];
  102. music?=?[[TRMusic?alloc] init];
  103. music.name?= @"Promises";
  104. music.album?= @"nero";
  105. music.artist?= @"Promises - EP";
  106. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  107. music.downloaded?= YES;
  108. music.highQuality?= NO;
  109. [musics?addObject:music];
  110. music?=?[[TRMusic?alloc] init];
  111. music.name?= @"Alone Together";
  112. music.album?= @"Save Rock and Roll";
  113. music.artist?= @"Fall Out Boy";
  114. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  115. music.downloaded?= YES;
  116. music.highQuality?= NO;
  117. [musics?addObject:music];
  118. music?=?[[TRMusic?alloc] init];
  119. music.name?= @"Reload (Radio Edit)";
  120. music.album?= @"Reload (Radio Edit) - Single";
  121. music.artist?= @"Sebastian Ingrosso";
  122. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  123. music.downloaded?= YES;
  124. music.highQuality?= NO;
  125. [musics?addObject:music];
  126. music?=?[[TRMusic?alloc] init];
  127. music.name?= @"I Love It (feat. Charli XCX)";
  128. music.album?= @"Iconic";
  129. music.artist?= @"Icona Pop";
  130. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  131. music.downloaded?= YES;
  132. music.highQuality?= NO;
  133. [musics?addObject:music];
  134. music?=?[[TRMusic?alloc] init];
  135. music.name?= @"Feel the Love";
  136. music.album?= @"Feel the Love (feat. John Newman) [Remixes] - EP";
  137. music.artist?= @"Rudimental";
  138. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  139. music.downloaded?= YES;
  140. music.highQuality?= NO;
  141. [musics?addObject:music];
  142. music?=?[[TRMusic?alloc] init];
  143. music.name?= @"Goin' Crazy (feat. Robbie Williams)";
  144. music.album?= @"Goin' Crazy (feat. Robbie Williams) - Single";
  145. music.artist?= @"Dizzee Rascal";
  146. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  147. music.downloaded?= YES;
  148. music.highQuality?= NO;
  149. [musics?addObject:music];
  150. music?=?[[TRMusic?alloc] init];
  151. music.name?= @"Still Into You";
  152. music.album?= @"Paramore";
  153. music.artist?= @"Paramore";
  154. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  155. music.downloaded?= YES;
  156. music.highQuality?= NO;
  157. [musics?addObject:music];
  158. music?=?[[TRMusic?alloc] init];
  159. music.name?= @"Heart Attack";
  160. music.album?= @"Demi";
  161. music.artist?= @"Demi Lovato";
  162. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  163. music.downloaded?= YES;
  164. music.highQuality?= NO;
  165. [musics?addObject:music];
  166. music?=?[[TRMusic?alloc] init];
  167. music.name?= @"Explosions";
  168. music.album?= @"Halcyon (Deluxe Edition)";
  169. music.artist?= @"Ellie Goulding";
  170. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  171. music.downloaded?= YES;
  172. music.highQuality?= NO;
  173. [musics?addObject:music];
  174. music?=?[[TRMusic?alloc] init];
  175. music.name?= @"I Need Your Love (feat. Ellie Goulding)";
  176. music.album?= @"I Need Your Love";
  177. music.artist?= @"Calvin Harris";
  178. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  179. music.downloaded?= YES;
  180. music.highQuality?= NO;
  181. [musics?addObject:music];
  182. music?=?[[TRMusic?alloc] init];
  183. music.name?= @"Starry Eyed";
  184. music.album?= @"Bright Lights";
  185. music.artist?= @"Ellie Goulding";
  186. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  187. music.downloaded?= YES;
  188. music.highQuality?= NO;
  189. [musics?addObject:music];
  190. music?=?[[TRMusic?alloc] init];
  191. music.name?= @"Lights (Single Version)";
  192. music.album?= @"Bright Lights";
  193. music.artist?= @"Ellie Goulding";
  194. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  195. music.downloaded?= YES;
  196. music.highQuality?= NO;
  197. [musics?addObject:music];
  198. music?=?[[TRMusic?alloc] init];
  199. music.name?= @"Who's That Chick?";
  200. music.album?= @"Who's That Chick - Single";
  201. music.artist?= @"David Guetta";
  202. music.duration?=?[self?durationWithMinutes:2 andSeconds:47];
  203. music.downloaded?= YES;
  204. music.highQuality?= NO;
  205. [musics?addObject:music];
  206. TRMusicGroup?* g1?=?[[TRMusicGroup?alloc] init];
  207. g1.name?= @"國外單曲";
  208. g1.musics?=?[musics?copy];
  209. g1.state?= TRMusicGroupStateDownloaded;
  210. musics?=?[NSMutableArray?array];
  211. music?=?[[TRMusic?alloc] init];
  212. music.name?= @"致青春";
  213. music.album?= @"致青春";
  214. music.artist?= @"王菲";
  215. music.duration?=?[self?durationWithMinutes:3 andSeconds:18];
  216. music.downloaded?= NO;
  217. music.highQuality?= NO;
  218. [musics?addObject:music];
  219. music?=?[[TRMusic?alloc] init];
  220. music.name?= @"好漢歌";
  221. music.album?= @"六十年代生人";
  222. music.artist?= @"劉歡";
  223. music.duration?=?[self?durationWithMinutes:3 andSeconds:41];
  224. music.downloaded?= NO;
  225. music.highQuality?= YES;
  226. [musics?addObject:music];
  227. music?=?[[TRMusic?alloc] init];
  228. music.name?= @"忐忑";
  229. music.album?= @"自由鳥";
  230. music.artist?= @"龔琳娜";
  231. music.duration?=?[self?durationWithMinutes:4 andSeconds:03];
  232. music.downloaded?= NO;
  233. music.highQuality?= YES;
  234. [musics?addObject:music];
  235. music?=?[[TRMusic?alloc] init];
  236. music.name?= @"愛情買賣";
  237. music.album?= @"我們的愛我不放手";
  238. music.artist?= @"慕容曉曉";
  239. music.duration?=?[self?durationWithMinutes:3 andSeconds:31];
  240. music.downloaded?= NO;
  241. music.highQuality?= YES;
  242. [musics?addObject:music];
  243. music?=?[[TRMusic?alloc] init];
  244. music.name?= @"法海你不懂愛";
  245. music.album?= @"法海你不懂愛 - 單曲";
  246. music.artist?= @"龔琳娜";
  247. music.duration?=?[self?durationWithMinutes:3 andSeconds:33];
  248. music.downloaded?= NO;
  249. music.highQuality?= NO;
  250. [musics?addObject:music];
  251. music?=?[[TRMusic?alloc] init];
  252. music.name?= @"最炫民族風";
  253. music.album?= @"我們的愛我不放手";
  254. music.artist?= @"鳳凰傳奇";
  255. music.duration?=?[self?durationWithMinutes:4 andSeconds:46];
  256. music.downloaded?= NO;
  257. music.highQuality?= YES;
  258. [musics?addObject:music];
  259. music?=?[[TRMusic?alloc] init];
  260. music.name?= @"金箍棒";
  261. music.album?= @"金箍棒 - 單曲";
  262. music.artist?= @"龔琳娜";
  263. music.duration?=?[self?durationWithMinutes:2 andSeconds:52];
  264. music.downloaded?= NO;
  265. music.highQuality?= NO;
  266. [musics?addObject:music];
  267. TRMusicGroup?* g2?=?[[TRMusicGroup?alloc] init];
  268. g2.name?= @"國內神曲";
  269. g2.musics?=?[musics?copy];
  270. g2.state?= TRMusicGroupStateNormal;
  271. TRMusicGroup?* g3?=?[[TRMusicGroup?alloc] init];
  272. g3.name?= @"Calvin Harris 專輯";
  273. g3.musics?= @[];
  274. g3.state?= TRMusicGroupStateNormal;
  275. TRMusicGroup?* g4?=?[[TRMusicGroup?alloc] init];
  276. g4.name?= @"Ellie Gounding 專輯";
  277. g4.musics?= @[];
  278. g4.state?= TRMusicGroupStateNormal;
  279. return @[g1, g2, g3, g4];
  280. }

步驟四:進行自定義cell布局

首先在TRMusicTableViewController類注冊Cell,并在TRAppDelegate中對屬性musics進行初始化,獲取到模擬的歌曲數據,代碼如下所示:

  1. //在TRAppDelegate中進行musics屬性的初始化
  2. -(BOOL)application:(UIApplication?*)application?
  3. didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions
  4. {
  5. NSArray?*musicGroups?=?[TRMusicGroup?fakeData];
  6. TRMusicGroup?*group?= musicGroups[0];
  7. UINavigationController?*navi?=?(UINavigationController?*)self.window.rootViewController;
  8. TRMusicTableViewController?*musicTVC?=?(TRMusicTableViewController?*) navi.topViewController;
  9. musicTVC.musics?= group.musics;
  10. return YES;
  11. }
  12. //在TRMusicsTableViewController中注冊cell
  13. -?(void)viewDidLoad
  14. {
  15. [super viewDidLoad];
  16. [self.tableView?registerNib:[UINib?nibWithNibName: @"TRMusicCell" bundle:nil] forCellReuseIdentifier:musicCellIdentifier];
  17. }

然后在TRMusicCell類中定義一個TRMusic類型屬性music,用于存儲單元格需要展示的歌曲,代碼如下所示:

  1. //TRMusicCell.h文件中定義屬性music
  2. @interface?TRMusicCell?: UITableViewCell
  3. @property?(strong, nonatomic)?TRMusic?*music;
  4. @end

在TRMusicCell重寫layoutSubviews方法,進行cell的界面布局,該方法中會根據每首歌曲的信息,計算子視圖的frame進行布局,代碼如下所示:

  1. -?(void)layoutSubviews
  2. {
  3. [super layoutSubviews];
  4. CGFloat?x?= self.downloadedImageView.frame.origin.x;
  5. if?(self.music.downloaded){
  6. x?+=?20;
  7. }
  8. if?(self.music.highQuality)?{
  9. CGRect?frame?= self.hdImageView.frame;
  10. frame.origin.x?= x;
  11. self.hdImageView.frame?= frame;
  12. x?+=?20;
  13. }
  14. CGRect?frame?= self.albumAndArtistLabel.frame;
  15. frame.origin.x?= x;
  16. self.albumAndArtistLabel.frame?= frame;
  17. }

歌曲的高清和下載圖標需要根據歌曲的相關信息進行顯示,可以將此部分功能通過重寫music的setter方法來實現,代碼如下所示:

  1. //TRMusicCell.m文件候中重寫music的setter方法
  2. -?(void)setMusic:(TRMusic?*)music
  3. {
  4. _music?= music;
  5. self.musicNameLabel.text?= music.name;
  6. self.albumAndArtistLabel.text?=?[NSString?stringWithFormat:@"%@ - %@", music.album, music.artist];
  7. self.durationLabel.text?=?[NSString?stringWithFormat:@"%d:%02d",?(int)music.duration/60,?(int)music.duration%60];
  8. self.downloadedImageView.hidden?=?!music.downloaded;
  9. self.hdImageView.hidden?=?!music.highQuality;
  10. //根據是否高清或下載狀態,需要重新布局
  11. [self?setNeedsLayout];?
  12. }

最后在TRMusicsTableViewController類中回答三問給表視圖加載歌曲數據,并將單元格的行高設置為50,代碼如下所示:

  1. -(NSInteger)tableView:(UITableView?*)tableView?
  2. numberOfRowsInSection:(NSInteger)section
  3. {
  4. return self.musics.count;
  5. }
  6. -(UITableViewCell?*)tableView:(UITableView?*)tableView?
  7. cellForRowAtIndexPath:(NSIndexPath?*)indexPath
  8. {
  9. TRMusicCell?*cell?=?[tableView?dequeueReusableCellWithIdentifier:musicCellIdentifier?forIndexPath:indexPath];
  10. cell.music?= self.musics[indexPath.row];
  11. return cell;
  12. }
  13. -(CGFloat)tableView:(UITableView?*)tableView?
  14. heightForRowAtIndexPath:(NSIndexPath?*)indexPath
  15. {
  16. return?50;
  17. }

5.4 完整代碼

本案例中,TRAppDelegate.m文件中的完整代碼如下所示:

  1. #import?"TRAppDelegate.h"
  2. #import?"TRMusicGroup.h"
  3. #import?"TRMusicTableViewController.h"
  4. @implementation TRAppDelegate
  5. -(BOOL)application:(UIApplication?*)application?
  6. didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions
  7. {
  8. NSArray?*musicGroups?=?[TRMusicGroup?fakeData];
  9. TRMusicGroup?*group?= musicGroups[0];
  10. UINavigationController?*navi?=?(UINavigationController?*)self.window.rootViewController;
  11. TRMusicTableViewController?*musicTVC?=?(TRMusicTableViewController?*) navi.topViewController;
  12. musicTVC.musics?= group.musics;
  13. return YES;
  14. }
  15. @end
?

本案例中,TRMusicTableViewController.h文件中的完整代碼如下所示:

  1. #import?<UIKit/UIKit.h>
  2. @interface?TRMusicTableViewController?: UITableViewController
  3. @property?(strong, nonatomic)?NSArray?*musics;
  4. @end
?

本案例中,TRMusicCell.h文件中的完整代碼如下所示:

  1. #import?<UIKit/UIKit.h>
  2. #import?"TRMusic.h"
  3. @interface?TRMusicCell?: UITableViewCell
  4. @property?(strong, nonatomic)?TRMusic?*music;
  5. @end
?

本案例中,TRMusicCell.m文件中的完整代碼如下所示:

  1. #import?"TRMusicCell.h
  2. @interface TRMusicCell ()
  3. @property (weak, nonatomic) IBOutlet UILabel *musicNameLabel;
  4. @property (weak, nonatomic) IBOutlet UILabel *albumAndArtistLabel;
  5. @property (weak, nonatomic) IBOutlet UILabel *durationLabel;
  6. @property (weak, nonatomic) IBOutlet UIImageView *downloadedImageView;
  7. @property (weak, nonatomic) IBOutlet UIImageView *hdImageView;
  8. @end
  9. @implementation TRMusicCell
  10. - (void)setMusic:(TRMusic *)music
  11. {
  12. _music = music;
  13. self.musicNameLabel.text = music.name;
  14. self.albumAndArtistLabel.text = [NSString stringWithFormat:@"%@?-?%@", music.album, music.artist];
  15. self.durationLabel.text = [NSString stringWithFormat:@"%d:%02d", (int)music.duration/60, (int)music.duration%60];
  16. self.downloadedImageView.hidden = !music.downloaded;
  17. self.hdImageView.hidden = !music.highQuality;
  18. [self setNeedsLayout];//需要重新布局
  19. }
  20. //當當前視圖的大小發生變化時調用
  21. - (void)layoutSubviews
  22. {
  23. [super layoutSubviews];
  24. CGFloat x = self.downloadedImageView.frame.origin.x;
  25. if (self.music.downloaded){
  26. x += 20;
  27. }
  28. if (self.music.highQuality) {
  29. CGRect frame = self.hdImageView.frame;
  30. frame.origin.x = x;
  31. self.hdImageView.frame = frame;
  32. x += 20;
  33. }
  34. CGRect frame = self.albumAndArtistLabel.frame;
  35. frame.origin.x = x;
  36. self.albumAndArtistLabel.frame = frame;
  37. }
  38. @end
?

本案例中,TRMusic.h文件中的完整代碼如下所示:

  1. #import?<Foundation/Foundation.h>
  2. @interface?TRMusic?: NSObject
  3. @property?(nonatomic, copy) NSString?* name;
  4. @property?(nonatomic, copy) NSString?* album;
  5. @property?(nonatomic, copy) NSString?* artist;
  6. @property?(nonatomic)?NSTimeInterval?duration;
  7. @property?(nonatomic)?BOOL?highQuality;
  8. @property?(nonatomic)?BOOL?downloaded;
  9. @end
隱藏

本案例中,TRMusicGroup.h文件中的完整代碼如下所示:

  1. #import?<Foundation/Foundation.h>
  2. #import?"TRMusic.h"
  3. typedef?NS_ENUM(NSInteger, TRMusicGroupState)?{
  4. TRMusicGroupStateNormal,????
  5. TRMusicGroupStateDownloading,????????
  6. TRMusicGroupStateDownloaded
  7. };
  8. @interface?TRMusicGroup?: NSObject
  9. @property?(nonatomic, copy) NSString?* name;
  10. @property?(nonatomic, strong) NSArray?* musics;
  11. @property?(nonatomic)?TRMusicGroupState?state;
  12. +?(NSArray?*) fakeData;
  13. @end
?

本案例中,TRMusicGroup.m文件中的完整代碼如下所示:

  1. #import?"TRMusicGroup.h"
  2. @implementation TRMusicGroup
  3. +?(NSArray?*) fakeData
  4. {
  5. NSMutableArray?* musics?= nil;
  6. TRMusic?* music?= nil;
  7. musics?=?[NSMutableArray?array];
  8. music?=?[[TRMusic?alloc] init];
  9. music.name?= @"Burn";
  10. music.album?= @"Burn - Single";
  11. music.artist?= @"Ellie Goulding";
  12. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  13. music.downloaded?= YES;
  14. music.highQuality?= NO;
  15. [musics?addObject:music];
  16. music?=?[[TRMusic?alloc] init];
  17. music.name?= @"Summertime Sadness (Cedric Gervais Remix)";
  18. music.album?= @"Summertime Sadness (Cedric Gervais Remix) - Single";
  19. music.artist?= @"Lana Del Rey";
  20. music.duration?=?[self?durationWithMinutes:6 andSeconds:52];
  21. music.downloaded?= YES;
  22. music.highQuality?= YES;
  23. [musics?addObject:music];
  24. music?=?[[TRMusic?alloc] init];
  25. music.name?= @"Spectrum";
  26. music.album?= @"Clarity";
  27. music.artist?= @"Zedd";
  28. music.duration?=?[self?durationWithMinutes:4 andSeconds:3];
  29. music.downloaded?= YES;
  30. music.highQuality?= YES;
  31. [musics?addObject:music];
  32. music?=?[[TRMusic?alloc] init];
  33. music.name?= @"It's Time";
  34. music.album?= @"It’s Time";
  35. music.artist?= @"Imagine Dragons";
  36. music.duration?=?[self?durationWithMinutes:4 andSeconds:0];
  37. music.downloaded?= NO;
  38. music.highQuality?= YES;
  39. [musics?addObject:music];
  40. music?=?[[TRMusic?alloc] init];
  41. music.name?= @"Dancing in The Moonlight";
  42. music.album?= @"Dancing In The Moonlight: The Best Of Toploader";
  43. music.artist?= @"Toploader";
  44. music.duration?=?[self?durationWithMinutes:3 andSeconds:53];
  45. music.downloaded?= YES;
  46. music.highQuality?= YES;
  47. [musics?addObject:music];
  48. music?=?[[TRMusic?alloc] init];
  49. music.name?= @"Thinking About You (feat. Ayah Marar)";
  50. music.album?= @"18 Months (Deluxe Edition)";
  51. music.artist?= @"Calvin Harris";
  52. music.duration?=?[self?durationWithMinutes:4 andSeconds:8];
  53. music.downloaded?= YES;
  54. music.highQuality?= YES;
  55. [musics?addObject:music];
  56. music?=?[[TRMusic?alloc] init];
  57. music.name?= @"You Make Me (feat. Salem Al Fakir)";
  58. music.album?= @"True";
  59. music.artist?= @"Avicii";
  60. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  61. music.downloaded?= YES;
  62. music.highQuality?= NO;
  63. [musics?addObject:music];
  64. music?=?[[TRMusic?alloc] init];
  65. music.name?= @"Safe and Sound";
  66. music.album?= @"Capital Cities EP";
  67. music.artist?= @"Capital Cities";
  68. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  69. music.downloaded?= YES;
  70. music.highQuality?= NO;
  71. [musics?addObject:music];
  72. music?=?[[TRMusic?alloc] init];
  73. music.name?= @"Reaching Out";
  74. music.album?= @"Welcome Reality (Deluxe Version)";
  75. music.artist?= @"nero";
  76. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  77. music.downloaded?= YES;
  78. music.highQuality?= NO;
  79. [musics?addObject:music];
  80. music?=?[[TRMusic?alloc] init];
  81. music.name?= @"Recover";
  82. music.album?= @"Recover - EP";
  83. music.artist?= @"CHVRCHES";
  84. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  85. music.downloaded?= YES;
  86. music.highQuality?= NO;
  87. [musics?addObject:music];
  88. music?=?[[TRMusic?alloc] init];
  89. music.name?= @"Hold On, We're Going Home (feat. Majid Jordan)";
  90. music.album?= @"Hold On, We're Going Home (feat. Majid Jordan) - Single";
  91. music.artist?= @"Drake";
  92. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  93. music.downloaded?= YES;
  94. music.highQuality?= NO;
  95. [musics?addObject:music];
  96. music?=?[[TRMusic?alloc] init];
  97. music.name?= @"The Mother We Share";
  98. music.album?= @"The Mother We Share - Single";
  99. music.artist?= @"CHVRCHES";
  100. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  101. music.downloaded?= YES;
  102. music.highQuality?= NO;
  103. [musics?addObject:music];
  104. music?=?[[TRMusic?alloc] init];
  105. music.name?= @"Promises";
  106. music.album?= @"nero";
  107. music.artist?= @"Promises - EP";
  108. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  109. music.downloaded?= YES;
  110. music.highQuality?= NO;
  111. [musics?addObject:music];
  112. music?=?[[TRMusic?alloc] init];
  113. music.name?= @"Alone Together";
  114. music.album?= @"Save Rock and Roll";
  115. music.artist?= @"Fall Out Boy";
  116. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  117. music.downloaded?= YES;
  118. music.highQuality?= NO;
  119. [musics?addObject:music];
  120. music?=?[[TRMusic?alloc] init];
  121. music.name?= @"Reload (Radio Edit)";
  122. music.album?= @"Reload (Radio Edit) - Single";
  123. music.artist?= @"Sebastian Ingrosso";
  124. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  125. music.downloaded?= YES;
  126. music.highQuality?= NO;
  127. [musics?addObject:music];
  128. music?=?[[TRMusic?alloc] init];
  129. music.name?= @"I Love It (feat. Charli XCX)";
  130. music.album?= @"Iconic";
  131. music.artist?= @"Icona Pop";
  132. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  133. music.downloaded?= YES;
  134. music.highQuality?= NO;
  135. [musics?addObject:music];
  136. music?=?[[TRMusic?alloc] init];
  137. music.name?= @"Feel the Love";
  138. music.album?= @"Feel the Love (feat. John Newman) [Remixes] - EP";
  139. music.artist?= @"Rudimental";
  140. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  141. music.downloaded?= YES;
  142. music.highQuality?= NO;
  143. [musics?addObject:music];
  144. music?=?[[TRMusic?alloc] init];
  145. music.name?= @"Goin' Crazy (feat. Robbie Williams)";
  146. music.album?= @"Goin' Crazy (feat. Robbie Williams) - Single";
  147. music.artist?= @"Dizzee Rascal";
  148. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  149. music.downloaded?= YES;
  150. music.highQuality?= NO;
  151. [musics?addObject:music];
  152. music?=?[[TRMusic?alloc] init];
  153. music.name?= @"Still Into You";
  154. music.album?= @"Paramore";
  155. music.artist?= @"Paramore";
  156. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  157. music.downloaded?= YES;
  158. music.highQuality?= NO;
  159. [musics?addObject:music];
  160. music?=?[[TRMusic?alloc] init];
  161. music.name?= @"Heart Attack";
  162. music.album?= @"Demi";
  163. music.artist?= @"Demi Lovato";
  164. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  165. music.downloaded?= YES;
  166. music.highQuality?= NO;
  167. [musics?addObject:music];
  168. music?=?[[TRMusic?alloc] init];
  169. music.name?= @"Explosions";
  170. music.album?= @"Halcyon (Deluxe Edition)";
  171. music.artist?= @"Ellie Goulding";
  172. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  173. music.downloaded?= YES;
  174. music.highQuality?= NO;
  175. [musics?addObject:music];
  176. music?=?[[TRMusic?alloc] init];
  177. music.name?= @"I Need Your Love (feat. Ellie Goulding)";
  178. music.album?= @"I Need Your Love";
  179. music.artist?= @"Calvin Harris";
  180. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  181. music.downloaded?= YES;
  182. music.highQuality?= NO;
  183. [musics?addObject:music];
  184. music?=?[[TRMusic?alloc] init];
  185. music.name?= @"Starry Eyed";
  186. music.album?= @"Bright Lights";
  187. music.artist?= @"Ellie Goulding";
  188. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  189. music.downloaded?= YES;
  190. music.highQuality?= NO;
  191. [musics?addObject:music];
  192. music?=?[[TRMusic?alloc] init];
  193. music.name?= @"Lights (Single Version)";
  194. music.album?= @"Bright Lights";
  195. music.artist?= @"Ellie Goulding";
  196. music.duration?=?[self?durationWithMinutes:3 andSeconds:51];
  197. music.downloaded?= YES;
  198. music.highQuality?= NO;
  199. [musics?addObject:music];
  200. music?=?[[TRMusic?alloc] init];
  201. music.name?= @"Who's That Chick?";
  202. music.album?= @"Who's That Chick - Single";
  203. music.artist?= @"David Guetta";
  204. music.duration?=?[self?durationWithMinutes:2 andSeconds:47];
  205. music.downloaded?= YES;
  206. music.highQuality?= NO;
  207. [musics?addObject:music];
  208. TRMusicGroup?* g1?=?[[TRMusicGroup?alloc] init];
  209. g1.name?= @"國外單曲";
  210. g1.musics?=?[musics?copy];
  211. g1.state?= TRMusicGroupStateDownloaded;
  212. musics?=?[NSMutableArray?array];
  213. music?=?[[TRMusic?alloc] init];
  214. music.name?= @"致青春";
  215. music.album?= @"致青春";
  216. music.artist?= @"王菲";
  217. music.duration?=?[self?durationWithMinutes:3 andSeconds:18];
  218. music.downloaded?= NO;
  219. music.highQuality?= NO;
  220. [musics?addObject:music];
  221. music?=?[[TRMusic?alloc] init];
  222. music.name?= @"好漢歌";
  223. music.album?= @"六十年代生人";
  224. music.artist?= @"劉歡";
  225. music.duration?=?[self?durationWithMinutes:3 andSeconds:41];
  226. music.downloaded?= NO;
  227. music.highQuality?= YES;
  228. [musics?addObject:music];
  229. music?=?[[TRMusic?alloc] init];
  230. music.name?= @"忐忑";
  231. music.album?= @"自由鳥";
  232. music.artist?= @"龔琳娜";
  233. music.duration?=?[self?durationWithMinutes:4 andSeconds:03];
  234. music.downloaded?= NO;
  235. music.highQuality?= YES;
  236. [musics?addObject:music];
  237. music?=?[[TRMusic?alloc] init];
  238. music.name?= @"愛情買賣";
  239. music.album?= @"我們的愛我不放手";
  240. music.artist?= @"慕容曉曉";
  241. music.duration?=?[self?durationWithMinutes:3 andSeconds:31];
  242. music.downloaded?= NO;
  243. music.highQuality?= YES;
  244. [musics?addObject:music];
  245. music?=?[[TRMusic?alloc] init];
  246. music.name?= @"法海你不懂愛";
  247. music.album?= @"法海你不懂愛 - 單曲";
  248. music.artist?= @"龔琳娜";
  249. music.duration?=?[self?durationWithMinutes:3 andSeconds:33];
  250. music.downloaded?= NO;
  251. music.highQuality?= NO;
  252. [musics?addObject:music];
  253. music?=?[[TRMusic?alloc] init];
  254. music.name?= @"最炫民族風";
  255. music.album?= @"我們的愛我不放手";
  256. music.artist?= @"鳳凰傳奇";
  257. music.duration?=?[self?durationWithMinutes:4 andSeconds:46];
  258. music.downloaded?= NO;
  259. music.highQuality?= YES;
  260. [musics?addObject:music];
  261. music?=?[[TRMusic?alloc] init];
  262. music.name?= @"金箍棒";
  263. music.album?= @"金箍棒 - 單曲";
  264. music.artist?= @"龔琳娜";
  265. music.duration?=?[self?durationWithMinutes:2 andSeconds:52];
  266. music.downloaded?= NO;
  267. music.highQuality?= NO;
  268. [musics?addObject:music];
  269. TRMusicGroup?* g2?=?[[TRMusicGroup?alloc] init];
  270. g2.name?= @"國內神曲";
  271. g2.musics?=?[musics?copy];
  272. g2.state?= TRMusicGroupStateNormal;
  273. TRMusicGroup?* g3?=?[[TRMusicGroup?alloc] init];
  274. g3.name?= @"Calvin Harris 專輯";
  275. g3.musics?= @[];
  276. g3.state?= TRMusicGroupStateNormal;
  277. TRMusicGroup?* g4?=?[[TRMusicGroup?alloc] init];
  278. g4.name?= @"Ellie Gounding 專輯";
  279. g4.musics?= @[];
  280. g4.state?= TRMusicGroupStateNormal;
  281. return @[g1, g2, g3, g4];
  282. }
  283. +?(NSTimeInterval) durationWithMinutes:(int)minutes?andSeconds:(int)seconds
  284. {
  285. return minutes?*?60?+ seconds;
  286. }
  287. @end

轉載于:https://www.cnblogs.com/hytx/p/5049478.html

總結

以上是生活随笔為你收集整理的触控(Touch) 、 布局(Layout)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

av在线免费在线观看 | 日本精品久久久久中文字幕5 | av一级二级| 六月丁香社区 | 婷婷射五月 | 精品xxx| 天天干天天射天天插 | 亚洲最大免费成人网 | 久久久久久久av麻豆果冻 | 国产精品欧美久久久久无广告 | 婷婷夜夜 | 五月婷久久 | 国产精品乱码久久 | 中文字幕之中文字幕 | 国产精品99爱 | 国产黄色看片 | 亚洲欧美日韩不卡 | 日韩午夜在线 | 午夜精品电影 | 最近久乱中文字幕 | 亚洲1区 在线 | 最近更新的中文字幕 | 激情偷乱人伦小说视频在线观看 | 天天摸天天舔天天操 | 免费在线观看黄色网 | 日韩 在线a | 在线看成人 | 人人舔人人 | 亚洲一本视频 | 中文字幕免费不卡视频 | 亚洲高清视频在线播放 | 国产又粗又猛又黄又爽视频 | 日韩a欧美 | 精品欧美在线视频 | 国产亚洲亚洲 | 亚洲综合成人专区片 | 国产亚洲片 | 亚洲成av人影院 | 丁香六月中文字幕 | 人人澡超碰碰97碰碰碰软件 | 亚洲色图色 | 狠狠插天天干 | 日韩在线观看视频中文字幕 | a午夜在线 | 国产小视频精品 | 天天射天天舔天天干 | 精品久久精品久久 | 啪啪肉肉污av国网站 | 国偷自产中文字幕亚洲手机在线 | 国产婷婷精品av在线 | 欧美午夜久久 | 91原创在线观看 | 日韩午夜一级片 | 国产一区精品在线观看 | 中文字幕在线观看的网站 | 国产一区二区高清不卡 | 91天堂影院 | 国产精品1区| 波多野结衣视频一区 | 操久在线 | 999成人 | 国产精品99久久免费观看 | 免费午夜av| 午夜精品久久久久久久99婷婷 | 久久国产精品99国产精 | 婷婷久久一区二区三区 | 久久综合九色综合久99 | 中文字幕你懂的 | 日韩黄色软件 | 国产午夜在线观看 | 久久er99热精品一区二区 | 天堂av在线免费 | 三级小视频在线观看 | 精品视频免费看 | 欧美极品xxx | 在线观看蜜桃视频 | 美女视频久久 | 久av电影 | www.国产精品 | 亚洲午夜精品久久久久久久久久久久 | 久久这里只有精品9 | 日日碰狠狠添天天爽超碰97久久 | www在线免费观看 | 五月婷婷激情综合网 | 亚洲男模gay裸体gay | 天天操天天爽天天干 | 97人人模人人爽人人喊中文字 | 日韩黄色一级电影 | 91av色| 97色婷婷成人综合在线观看 | 欧美日韩精品在线观看视频 | 99精品欧美一区二区蜜桃免费 | 一级片免费观看 | 亚洲国产成人在线观看 | 99国产精品视频免费观看一公开 | 在线播放av网址 | 国产最新在线观看 | 一区二区三区免费在线观看视频 | 日韩欧美综合在线视频 | 曰本免费av | 国产亚洲视频在线观看 | 久久久www成人免费毛片 | 四虎国产 | 色香com. | 国产免费久久 | 中国成人一区 | 九九免费在线看完整版 | 天天草天天草 | 欧美综合色在线图区 | 亚洲第一av在线 | 国产亚洲午夜高清国产拍精品 | 久久天天躁狠狠躁夜夜不卡公司 | 国产精品一区电影 | 亚洲3级 | 99精品国产99久久久久久福利 | 欧美日韩久久不卡 | 91久久影院 | 亚洲综合色丁香婷婷六月图片 | 成人在线免费av | 久久艹在线 | 99久久精品电影 | 国产香蕉视频 | 欧美孕妇视频 | 色在线网| 又黄又爽又无遮挡的视频 | 欧美a级免费视频 | 日韩在线一二三区 | 久久激五月天综合精品 | 免费看的黄网站 | 日本一区二区高清不卡 | 久久久久看片 | 91免费视频网站在线观看 | 国产精久久久 | 亚洲精品av在线 | 欧美日韩一区二区三区不卡 | 精品999久久久 | 免费久久精品视频 | 成人免费ⅴa | 国产精久久久久久妇女av | 亚洲一区日韩在线 | 97人人澡人人爽人人模亚洲 | www.一区二区三区 | 午夜影视剧场 | 黄色三级久久 | 美女视频黄色免费 | 中文字幕高清视频 | 亚洲天天草 | 九九九在线观看 | 综合在线亚洲 | 成人国产在线 | 麻豆免费在线播放 | 人人爽人人爽av | 99久久久久久 | 色丁香综合 | 黄色网www | 国产福利91精品一区 | www激情久久 | 国产精品专区在线观看 | 久久免费看片 | 国产精品国产三级国产不产一地 | 国产午夜精品理论片在线 | 精品一区二区三区久久久 | 一区二区三区久久精品 | 免费观看www小视频的软件 | 国产精品手机播放 | 69国产盗摄一区二区三区五区 | 区一区二区三在线观看 | 国产午夜精品久久 | 国产精品一区二区三区在线 | 日韩电影中文字幕在线观看 | 五月婷婷六月丁香 | 国产一级做a爱片久久毛片a | 日韩电影在线观看中文字幕 | 久久久久久不卡 | 中文字幕资源在线观看 | 久久综合狠狠综合久久狠狠色综合 | 992tv在线观看网站 | 欧美视频日韩视频 | 精品久久九九 | 99产精品成人啪免费网站 | 亚洲精品一区二区三区新线路 | 夜夜骑天天操 | 国产精品 中文字幕 亚洲 欧美 | 久久久久国产精品视频 | 粉嫩av一区二区三区四区五区 | 成人xxxx | 在线观看中文字幕视频 | 久久精品免费播放 | 天天操天天干天天操天天干 | 免费碰碰 | 日韩中文在线播放 | 免费亚洲精品视频 | 91亚洲精品久久久蜜桃借种 | 91九色在线视频观看 | 日本xxxxav| 伊人婷婷网 | 天天射网 | 久久久高清一区二区三区 | 麻豆一精品传二传媒短视频 | 超碰在线网 | 国产999精品久久久久久 | 日日爽| 天天操天天干天天操天天干 | 韩国av一区二区 | 亚洲日本韩国一区二区 | 国产高清免费在线观看 | 国产一区二区视频在线播放 | 久久久久久久网 | 777视频在线观看 | 日日干天天插 | 国产糖心vlog在线观看 | 国产精品久久久久久影院 | 一区二区三区中文字幕在线 | 国产精品一区二区 91 | 中文字幕人成乱码在线观看 | 成+人+色综合 | 国产精品久久久久久一区二区三区 | 婷婷六月中文字幕 | 日日夜日日干 | 国产乱码精品一区二区蜜臀 | 久久精品国产第一区二区三区 | 久久久久综合网 | 在线观看视频99 | 香蕉视频国产在线 | 1024手机看片国产 | 国产最新视频在线观看 | 精品伦理一区二区三区 | 激情偷乱人伦小说视频在线观看 | 国产日韩在线一区 | 亚洲国产影院 | 国产精品二区在线 | 狠狠操在线 | 午夜av在线免费 | bbbb操bbbb | 国产美女视频 | 中文字幕网站视频在线 | 麻豆一级视频 | 精品久久免费 | 午夜精品久久久久久久久久久 | 亚洲最大免费成人网 | 99久久精品国产亚洲 | 国产不卡免费av | 天天操,夜夜操 | 欧美一级片在线免费观看 | 97偷拍在线视频 | 久久久久久久久久伊人 | 久久男人视频 | 久久精品中文字幕 | 亚洲日本一区二区在线 | 日本精a在线观看 | 麻豆94tv免费版 | 91最新网址 | 在线观看www视频 | 久草精品在线播放 | 精品国产aⅴ一区二区三区 在线直播av | va视频在线观看 | 在线a人片免费观看视频 | 一区二区精品久久 | 日韩精品中文字幕一区二区 | 国产在线2020 | 一区二区三区在线免费 | 精品国产一区二区三区久久久蜜月 | 婷婷午夜激情 | 99精品在线免费在线观看 | 九九视频在线播放 | 色 免费观看 | 国产精品白浆视频 | 成人动漫视频在线 | 992tv在线成人免费观看 | www国产亚洲精品久久麻豆 | 99久久久成人国产精品 | 久久国色夜色精品国产 | 五月开心六月婷婷 | 在线观看色网 | 亚洲五月六月 | 久久尤物电影视频在线观看 | 免费视频资源 | 999电影免费在线观看 | 免费看的黄色录像 | 久久激情网站 | 久久99影院 | 日韩av在线网站 | 国产日韩欧美在线 | 91精品婷婷国产综合久久蝌蚪 | 日韩av不卡播放 | 国产成人久久精品一区二区三区 | 国产日韩欧美视频在线观看 | 国产精品毛片一区二区在线 | 婷婷色av| 亚洲久草网 | 日本三级吹潮在线 | 中文字幕在线观看资源 | 国产一级片免费观看 | 国产成人一级 | 蜜臀久久99精品久久久酒店新书 | 91大神精品视频在线观看 | 久久久久亚洲精品男人的天堂 | 黄色精品网站 | 国产91在线免费视频 | 成人动漫一区二区三区 | 在线观看 国产 | 91丨九色丨国产女 | 97超碰人人澡人人 | 欧美精品乱码99久久影院 | 在线观看精品一区 | 午夜视频福利 | 国产午夜精品一区二区三区在线观看 | 欧美国产高清 | 九九av| 国产精品video爽爽爽爽 | 青青河边草免费视频 | 国产成人av一区二区三区在线观看 | 91亚洲精品乱码久久久久久蜜桃 | 欧美日韩中文在线 | 久久午夜影视 | 高清不卡一区二区三区 | www.成人久久 | 久久一久久 | 天堂av网址 | 69亚洲视频 | 欧美日韩网址 | 国产日韩精品一区二区三区 | 欧美另类xxx| 欧美日韩精品久久久 | 99一级片 | 操高跟美女| 99久久精品视频免费 | 国产精品久久久久久久久久白浆 | 黄色小网站免费看 | 手机在线永久免费观看av片 | 亚洲视频每日更新 | 午夜视频在线观看网站 | 毛片永久新网址首页 | 国产高清在线永久 | 亚洲国产av精品毛片鲁大师 | 亚洲精品国偷自产在线99热 | 最近日韩中文字幕中文 | 狠狠干 狠狠操 | 久草视频看看 | 香蕉视频网址 | 激情影音先锋 | 深夜免费小视频 | 在线不卡中文字幕播放 | 在线а√天堂中文官网 | 免费国产一区二区 | 欧美 亚洲 另类 激情 另类 | 天天草天天干天天射 | 色婷婷五 | 日韩av片在线 | 久久精品国产亚洲aⅴ | 免费看黄网站在线 | 91色在线观看 | av片中文字幕 | 国产精品美女久久久久久 | 视频一区在线免费观看 | 精品国产免费av | 久久狠狠干 | www.夜夜操 | 中文字幕国产精品 | 五月天亚洲综合 | 四虎在线视频免费观看 | 国产一级电影免费观看 | 日韩久久一区 | 99热都是精品 | 国产一区自拍视频 | 最近最新最好看中文视频 | 伊人网综合在线观看 | 国产不卡在线视频 | 97超视频在线观看 | 在线免费日韩 | 91色吧 | 免费观看一级一片 | 日本成人中文字幕在线观看 | 久久草在线精品 | 日本久久成人中文字幕电影 | 成人全视频免费观看在线看 | 日韩一区二区在线免费观看 | 色综合色综合色综合 | 在线中文字幕播放 | 亚洲精品国产精品乱码在线观看 | 又色又爽又黄高潮的免费视频 | 韩国精品在线观看 | 久久亚洲综合色 | 久久久久网址 | 婷婷五综合 | 91视频久久久久 | 色在线国产 | 亚洲国产欧美一区二区三区丁香婷 | 激情综合啪 | 久久免费久久 | 欧美一区二区精美视频 | 国产视频观看 | 精品国产乱码久久久久久1区2匹 | 狠狠色综合网站久久久久久久 | 国产精品免费在线播放 | 干综合网 | 欧美日韩xx| 中文字幕2021 | 91传媒在线看 | 日本精品一二区 | 色综合久久久久综合99 | 成人久久18免费网站图片 | 人人射 | 国产男女无遮挡猛进猛出在线观看 | 精产嫩模国品一二三区 | 国产区 在线| 碰超人人 | 亚洲美女免费视频 | 久久精品99视频 | 成年人视频在线免费播放 | 成人黄色短片 | 国产色拍拍拍拍在线精品 | 精品久久久成人 | 人人爽人人做 | 天天射综合网视频 | 国产97免费| 欧洲亚洲精品 | 四虎在线视频 | 国产精品视频999 | 成人黄色电影在线播放 | 欧美一区二区三区激情视频 | 韩国av在线 | 91大神免费视频 | 日韩欧美观看 | 成人在线免费观看网站 | 99人成在线观看视频 | 国产精品电影在线 | 国产精品美女视频网站 | 欧美另类人妖 | 午夜天天操| av在线影片 | 午夜国产在线 | 一区二区三区免费在线观看视频 | 人人射人人 | 欧洲激情综合 | 日韩高清激情 | 特级大胆西西4444www | 2022久久国产露脸精品国产 | 久久韩国免费视频 | 亚洲视频1| 亚洲久草在线 | 97精品国自产拍在线观看 | 久久福利在线 | 探花视频免费观看 | 天天干天天色2020 | 91亚洲精品久久久中文字幕 | 午夜视频一区二区三区 | 久久国产成人午夜av影院宅 | www在线免费观看 | 蜜臀av麻豆 | 色婷婷久久久综合中文字幕 | 中文在线免费看视频 | 亚洲成人xxx| 国产成人在线一区 | 天堂av色婷婷一区二区三区 | 亚洲精品影院在线观看 | 天天操夜夜操国产精品 | 国产午夜精品一区二区三区在线观看 | 欧美国产精品一区二区 | 视频在线观看日韩 | 精品一区二区电影 | 最近免费中文字幕mv在线视频3 | 日韩成人欧美 | 九色91av| 久久久一本精品99久久精品 | 久久久久久久av麻豆果冻 | 青青河边草观看完整版高清 | 久久久久草 | 久久av中文字幕片 | 日本三级不卡视频 | 在线99 | 在线日本v二区不卡 | 涩五月婷婷 | 欧女人精69xxxxxx | 91麻豆免费看| 一区二区三区动漫 | 亚洲最大免费成人网 | 欧美日产一区 | av中文字幕av| www日| 国产涩图 | 在线播放91 | 久久影视精品 | 玖操 | 91探花在线视频 | 97色涩| 天天天插 | 精品欧美日韩 | 激情影院在线 | 久久久精品| www狠狠| 国产黄色视 | 中文字幕91视频 | 中文字幕一区二区在线播放 | 米奇狠狠狠888 | 美女视频黄免费的 | 九九免费在线观看 | 久久久久久久久久久电影 | 草免费视频 | 欧美极品少妇xxxx | 色狠狠婷婷| 69精品在线| 日韩精品一区二区三区丰满 | 色网站在线免费观看 | 九色琪琪久久综合网天天 | 国产伦理剧 | 亚洲成熟女人毛片在线 | 成人h动漫在线看 | 一级性视频 | 国产这里只有精品 | 精品美女久久久久 | 操操日| 又黄又刺激又爽的视频 | 日本最新高清不卡中文字幕 | 91插插视频 | 国产精品亚洲人在线观看 | 欧美亚洲一区二区在线 | 亚洲国产一区在线观看 | 久久综合偷偷噜噜噜色 | 亚洲黄色免费在线看 | 激情大尺度视频 | 香蕉久久久久 | 手机看片国产日韩 | 久久久视频在线 | 日韩久久精品一区二区 | 亚洲高清色综合 | 国产亚洲免费观看 | 天天亚洲综合 | 婷婷色 亚洲 | 一区二区三区手机在线观看 | 国产精品综合久久久久久 | 国内精品久久久久久久影视麻豆 | 日韩网站免费观看 | 插久久 | 碰超人人 | www成人精品 | 中文字幕在线观看国产 | 99色资源| 亚洲成人精品久久 | 天天激情 | 成人免费看黄 | 在线视频日韩欧美 | 夜夜操网站 | 午夜精品中文字幕 | 免费日韩视 | 国产精品免费人成网站 | 欧美成人亚洲成人 | 777奇米四色 | 日日碰狠狠躁久久躁综合网 | 97人人添人澡人人爽超碰动图 | 天天干天天插 | 日韩成人邪恶影片 | 精品久久久久免费极品大片 | 久久精品亚洲精品国产欧美 | 香蕉在线视频播放网站 | 99久久精品久久亚洲精品 | 亚洲视频免费在线观看 | 久久精品欧美 | 亚洲精品小视频在线观看 | 99久久精品免费看国产四区 | 国产人成在线观看 | 色www免费视频 | 美女视频免费一区二区 | 99精品成人| 久久99精品一区二区三区三区 | 激情校园亚洲 | 免费一级片在线观看 | 色综合天天天天做夜夜夜夜做 | 久久综合久色欧美综合狠狠 | 日韩av中文在线 | 高清视频一区二区三区 | av电影免费在线 | 久久综合久久综合这里只有精品 | 欧美日韩3p | 久久人人爽av | 久久精品视频在线观看免费 | 伊人精品在线 | 国产福利av | 久久毛片网站 | 国产亚洲日 | 高清国产午夜精品久久久久久 | 欧美日韩国产一区二 | 91av视频在线播放 | 91久久国产露脸精品国产闺蜜 | 精品国产免费人成在线观看 | 免费日韩一区二区三区 | 国产一级电影 | 麻豆久久一区 | 国产成人av网站 | 狠狠的干狠狠的操 | 欧美日韩视频观看 | 日韩高清久久 | 99精品免费视频 | 91av99| 91麻豆精品国产午夜天堂 | 国产精品欧美精品 | 日韩v在线 | 狠狠狠色丁香婷婷综合久久五月 | 久久99久国产精品黄毛片入口 | 亚洲婷婷综合色高清在线 | 久草精品视频在线播放 | 国产视频在线播放 | 日韩欧美国产视频 | 国产在线a视频 | 国产精品网址在线观看 | 在线观看香蕉视频 | 91看片黄色| 色资源中文字幕 | 久久系列 | 成人免费一区二区三区在线观看 | 国产成人福利 | 色婷婷啪啪免费在线电影观看 | 欧美日韩国语 | 91大神精品视频在线观看 | 在线观看一区 | 日韩网站中文字幕 | 成人福利在线观看 | 久久国产精品久久久久 | 国产美女精品视频免费观看 | 国产精品久久久av久久久 | 久久久国产精品网站 | 亚洲精品乱码久久久久久久久久 | 综合精品久久 | 欧美片网站yy | 亚洲五月激情 | 成人在线观看免费 | 欧美性大胆 | 成年人在线免费视频观看 | 天天爽夜夜爽精品视频婷婷 | 亚洲精品国产精品国自 | 久久老司机精品视频 | 中文字幕视频免费观看 | 国产成人一区在线 | 久久精品综合网 | 国产呻吟在线 | 久久激情网站 | 九九在线视频免费观看 | 日韩在线观 | 久久午夜网 | 国产视频精品免费播放 | 狠狠操天天操 | 成人午夜影院 | 又黄又爽又刺激 | 中国一区二区视频 | 国产精品欧美一区二区三区不卡 | 毛片精品免费在线观看 | 日本在线观看一区二区 | 免费看的黄网站软件 | 成人小视频在线观看免费 | 日韩超碰| 久久久午夜电影 | 成年人电影免费看 | 99精品在线 | 日韩在线观看一区二区三区 | 麻豆视频国产在线观看 | 又黄又爽又色无遮挡免费 | 美女一级毛片视频 | 亚洲 中文 欧美 日韩vr 在线 | 久久精品国产久精国产 | 久爱精品在线 | 久久精品国亚洲 | 久久久久国产一区二区 | 日本久久不卡视频 | a黄色影院 | 色吧久久 | 99精品免费观看 | 欧美a性| 在线天堂v | 高清精品在线 | 精品国产aⅴ一区二区三区 在线直播av | 国产精品欧美一区二区三区不卡 | 91cn国产在线 | 久久精品99 | 久久国内精品视频 | 五月婷婷在线视频观看 | 国产精品毛片一区视频播 | 久久香蕉一区 | 伊人国产视频 | 免费成人在线视频网站 | 久久中文字幕导航 | 久久久久国产精品一区二区 | 欧美精品乱码久久久久 | 国产色中涩 | 免费看片亚洲 | 国产精品视频久久久 | 日本中文字幕在线免费观看 | 亚洲精品国产视频 | 在线免费视 | 国内综合精品午夜久久资源 | 亚洲电影久久久 | 成人免费在线电影 | 欧美九九视频 | 国产精品国产毛片 | 国产一级视频免费看 | 激情久久五月 | 福利视频一区二区 | 国产96在线视频 | 国产99久久久国产精品成人免费 | 欧美成人性网 | 国产成视频在线观看 | 91av大全| av超碰在线 | 天天射天天爽 | 亚洲国产午夜精品 | 天堂黄色片 | 综合激情婷婷 | 久久久免费观看 | 日日干美女 | 国产精品欧美 | 9在线观看免费高清完整版在线观看明 | 国产人成看黄久久久久久久久 | 亚洲欧美精品在线 | 日韩av中文字幕在线 | 欧美性成人 | 在线午夜 | 91视频xxxx| 欧美日韩3p | 日韩高清一区在线 | 狠狠躁夜夜a产精品视频 | 99精品国产高清在线观看 | 手机在线视频福利 | 一区二区三区日韩视频在线观看 | 欧美日韩精品在线 | 成人少妇影院yyyy | 亚洲国产日韩欧美在线 | 亚洲精品视频在线观看免费视频 | 中文资源在线播放 | 天天色天天操综合 | 久久综合影视 | av亚洲产国偷v产偷v自拍小说 | 天天插狠狠干 | 欧美性黄网官网 | 丁香资源影视免费观看 | 国产精品久久久久久久电影 | 国产在线91在线电影 | 婷婷在线网站 | 色噜噜日韩精品一区二区三区视频 | 国产高清久久久久 | 亚洲免费视频在线观看 | 亚洲区视频在线 | 波多野结衣电影一区二区三区 | 五月天狠狠操 | 中文字幕视频观看 | 日本爽妇网 | 欧美少妇xxx | 久久字幕 | 国产午夜剧场 | 国产精品18久久久久久久久久久久 | 久久99久久99精品免观看软件 | 国产成人一区二区三区在线观看 | 国产盗摄精品一区二区 | 在线免费视频 你懂得 | 久久久久久久久久电影 | 伊人小视频 | 成人在线视频论坛 | 欧美亚洲精品在线观看 | 97小视频| 欧美精品v国产精品v日韩精品 | 亚洲精品久久视频 | 美女视频黄免费的 | 中文字幕免费一区二区 | 狠狠色伊人亚洲综合成人 | 伊人影院在线观看 | 成人国产精品一区二区 | 青春草免费在线视频 | 亚洲在线高清 | 亚洲精品在线一区二区三区 | 在线观看免费一级片 | 有没有在线观看av | 日日综合网 | 97精品国产一二三产区 | 久久综合色一综合色88 | 中文字幕999 | 国产精品高潮呻吟久久久久 | 久久男人免费视频 | 免费在线国产精品 | 色婷婷激情综合 | 日韩精品一区二区在线 | 1000部国产精品成人观看 | 国产91成人在在线播放 | 9在线观看免费高清完整版在线观看明 | 美女视频黄免费的久久 | 亚洲成 人精品 | 欧美精品xxx | 看全黄大色黄大片 | 色婷婷激情网 | 成人免费观看视频网站 | 女人18精品一区二区三区 | 99久久99热这里只有精品 | 岛国大片免费视频 | 婷婷激情网站 | 在线观看免费日韩 | 久久视频网| 免费进去里的视频 | 亚州精品天堂中文字幕 | 久久国产91 | 韩国精品视频在线观看 | 久久av福利| 久久视频这里有精品 | 午夜国产福利视频 | 91精品国产乱码久久 | 蜜臀久久99精品久久久无需会员 | 中文字幕在线播放av | 国产精品区免费视频 | 一级黄色大片在线观看 | 在线探花 | 在线观看免费一级片 | 99在线精品视频 | 四月婷婷在线观看 | 欧美日韩国产在线精品 | 欧美一区二区三区免费看 | 色狠狠综合 | 美女久久久久久久久久久 | 国产第一页在线播放 | 婷婷色 亚洲 | 96香蕉视频| 国产精品久久久久久一区二区 | 男女激情片在线观看 | 国产亚洲成人精品 | 狠狠干夜夜操 | 久久不射网站 | 日韩精品在线观看av | 91热视频 | 国产一区视频免费在线观看 | 西西www4444大胆视频 | 亚洲专区一二三 | 黄色动态图xx | 国产在线视频不卡 | 国产精品久久99综合免费观看尤物 | 伊人av综合| 韩日三级在线 | 香蕉日日 | 91在线国内视频 | 免费在线观看亚洲视频 | 精品久久久久久久久久久院品网 | 国产精品美女久久久网av | 黄a网站| 日韩免费观看一区二区三区 | 久久精品国产成人 | 麻花豆传媒mv在线观看 | 国产精品video爽爽爽爽 | 久久观看最新视频 | 日韩精品视频一二三 | 久久爱影视i | 国内精品久久久久影院一蜜桃 | 亚洲一区二区精品视频 | 亚洲天堂社区 | 国产一区二区三区 在线 | 99成人免费视频 | 狠狠色伊人亚洲综合网站野外 | 999一区二区三区 | 18av在线视频 | 四虎在线视频 | 99久久国产免费,99久久国产免费大片 | 成人午夜毛片 | 久久久久伊人 | 亚洲天堂毛片 | 超碰97中文| 国产免费资源 | 97免费在线观看视频 | 日韩高清精品一区二区 | 天天操夜夜操天天射 | 久久久久国产精品www | 国产精品久免费的黄网站 | 中文字幕在线视频免费播放 | 久久精品国产v日韩v亚洲 | 中文字幕永久在线 | 国产日产精品久久久久快鸭 | 日韩字幕在线观看 | 亚州精品天堂中文字幕 | 日本成人中文字幕在线观看 | av片无限看| 中文字幕在线乱 | 色吧av色av | 久久免费激情视频 | 又污又黄网站 | 午夜久久精品 | av成人亚洲 | 狠狠狠色丁香婷婷综合激情 | 九九九热精品免费视频观看网站 | 欧美日韩一区久久 | 免费观看的黄色 | 欧美日韩中文字幕综合视频 | 99超碰在线观看 | 日韩综合第一页 | 亚洲精品乱码久久久一二三 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 91在线永久 | 天天干,天天插 | 成人三级网站在线观看 | 亚洲一区欧美激情 | 少妇bbbb搡bbbb桶 | 国产123av| 免费看网站在线 | 成人午夜网址 | 国产91av视频在线观看 | 亚洲更新最快 | 久久久影院一区二区三区 | 激情久久五月 | 亚洲综合情 | 欧洲在线免费视频 | av黄色大片 | 亚洲国产成人在线观看 | 国产精品久久久久一区二区三区共 | 日本一区二区三区免费观看 | 国产精品视频免费在线观看 | 中文在线www| 免费亚洲成人 | 韩日av一区二区 | 特及黄色片 | 欧美一级专区免费大片 | 欧美做受xxx | 国产精品正在播放 | 碰超在线97人人 | 亚洲精品中文字幕在线观看 | 免费看av片网站 | 就要色综合 | 久久99精品热在线观看 | 波多野结衣在线视频免费观看 | 欧美国产一区二区 | 国产福利午夜 | 国产高清av免费在线观看 | 久久久激情网 | 久久99视频精品 | 狠狠色2019综合网 | 欧美一区二区三区在线视频观看 | 成人免费在线观看入口 | 精品女同一区二区三区在线观看 | 日韩视频精品在线 | 国产精品久久精品 | 久久er99热精品一区二区三区 | 久久电影国产免费久久电影 | 亚洲免费在线视频 | 久久精品人人做人人综合老师 | 精品久久久久久久久久 | 婷婷丁香社区 | 亚洲在线视频免费 | 青青草在久久免费久久免费 | 日韩欧美一区二区在线观看 | 片网址 | 日韩电影一区二区在线 | 免费在线观看av | 成人av资源| 亚洲日本色 | 亚洲专区一二三 | 91九色porny蝌蚪视频 | 成人久久18免费网站麻豆 | 区一区二区三区中文字幕 | 六月激情网| 国产精品自产拍 | 欧美激情视频在线免费观看 | 国产天天爽| 国产精品视频专区 | 人人澡超碰碰97碰碰碰软件 | 伊人资源视频在线 | 精品国产一区二区三区在线 | 在线99热 | 激情综合网在线观看 | 色婷婷激情网 | 一区二区电影在线观看 | 久久er99热精品一区二区三区 | 一区二区三区四区久久 | 伊人手机在线 | 美女视频久久黄 | 日韩va欧美va亚洲va久久 | 操操操人人 | www.夜夜| 欧美一区影院 | 亚洲人成人天堂h久久 | 国产精品完整版 | 91天天操| 色久五月 | 欧美 亚洲 另类 激情 另类 | 黄色免费观看 | 久久久69| 一级成人免费视频 | 亚洲视频一级 | 在线观看精品国产 | 特黄一级毛片 | 欧美成人日韩 | 久久久99精品免费观看 | 亚洲综合在线播放 | 日本激情动作片免费看 | 国产成人一区二 | 在线观看的a站 | 成人在线视频免费观看 | 欧美日韩久 | 亚洲一本视频 | 精品黄色片 | 日日干天天爽 | 中文字幕在线观看完整版电影 | 久草在线视频中文 | 精品在线观看免费 | 一区二区影院 | 在线综合 亚洲 欧美在线视频 | 美女黄频视频大全 | 日韩成人黄色 | 免费在线黄 |