精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

objc.io#21#照片框架

移動開發 iOS
每天,用 iPhone 拍攝的照片數量超過了任何相機。每年 iOS 設備上的顯示效果變得越來越好,回到 iPad 剛出現還沒有 Retina 顯示屏的時代,大屏幕的殺手級功能之一就是可以展示用戶照片和瀏覽器照片庫。自從相機成為 iPhone 最重要和最受歡迎的功能開始,對能管理和加工用戶照片庫中寶貴的照片的應用程序和工具就有著巨大的需求。

介紹

每天,用 iPhone 拍攝的照片數量超過了任何相機。每年 iOS 設備上的顯示效果變得越來越好,回到 iPad 剛出現還沒有 Retina 顯示屏的時代,大屏幕的殺手級功能之一就是可以展示用戶照片和瀏覽器照片庫。自從相機成為 iPhone 最重要和***的功能開始,對能管理和加工用戶照片庫中寶貴的照片的應用程序和工具就有著巨大的需求。

直到 2014 年夏天前,開發者只能用 AssetsLibrary 框架訪問日益增長的用戶的照片庫。幾年以來,相機應用和照片應用發生了顯著的變化,增加了許多新特性,包括按時刻來組織照片的方式。但與此同時,AssetsLibrary 框架卻沒有跟上步伐。

隨著 iOS 8 的到來,蘋果給我們提供了一個現代化的框架 —— PhotoKit,它比 AssetsLibrary 表現更好,并且擁有讓應用和設備照片庫無縫工作的特性。

概要

我們將從框架對象模型的鳥瞰圖開始:實體和實體間的關系,獲取實體的實例,以及使用獲取的結果進行工作。

除此之外,我們的講解還會涉及到一些在使用 AssetsLibrary 時,尚未對開發者開放的資源元數據。

然后我們會討論加載資源的圖像數據:過程本身,大量可用的選項,一些陷阱和邊界案例。

***,我們會談談通過外部參與者來觀察照片庫的變化,學習如何創建和提交我們自己修改的改變。

PhotoKit 對象模型

PhotoKit 定義了與系統的 Photos 應用內展現給用戶的模型對象相一致的實體圖表。這些照片實體都是輕量級的不可變對象。所有的 PhotoKit 對象都是繼承自 PHObject 抽象基類,其公共接口只提供了一個 localIdentifier 屬性。

PHAsset 表示用戶照片庫中一個單獨的資源,用以提供資源的元數據。

成組的資源叫做資源集合,用 PHAssetCollection 類表示。一個單獨的資源集合可以是照片庫中的一個相冊或者一個時刻,或者是一個特殊的“智能相冊”。這種智能相冊包括所有的視頻集合,最近添加的項目,用戶收藏,所有連拍照片等等。PHAssetCollection 是 PHCollection 的子類。

PHCollectionList 表示一組的 PHCollections。因為它本身就是 PHCollection,所以集合列表可以包含其他集合列表,它們允許復雜的集合繼承。實際上,我們可以在照片應用的時刻欄目中看到它:照片 --- 時刻 --- 精選 --- 年度,就是一個例子。

獲取 (Fetch) 照片實體

獲取 vs. 枚舉

那些熟悉 AssetsLibrary 框架的開發者可能會記得 AssetsLibrary 可以用一些特定屬性來找到需要的資源,其中一個必須枚舉用戶資源庫來獲得匹配的資源。不得不承認,這個 API 雖然提供了一些縮小搜索域的方法,但還是十分低效。

而與之形成鮮明對比,PhotoKit 實體的實例是通過獲取得到的。那些熟悉 Core Data 的人,會覺得和 PhotoKit 在概念和描述都比較接近。

獲取請求

獲取操作是由上面描述的實體的類方法實現的。要使用哪個類/方法,取決于問題所在范圍和你展示與遍歷照片庫的方式。所有獲取方法的命名都是相似的:class func fetchXXX(..., options: PHFetchOptions) -> PHFetchResult 。options 參數給了我們一個對結果進行過濾和排序的途徑,這和 NSFetchRequest 的 predicate 與 sortDescriptors 參數類似。

獲取結果

你可能已經注意到了這些獲取操作不是異步的。它們返回了一個 PHFetchResult 對象,可以用類似 NSArray 的接口來訪問結果內的集合。它會按需動態加載內容并且緩存最近請求的內容。這個行為和設置了 batchSize 屬性的 NSFetchRequest 返回的結果數組相似。對于 PHFetchResult 來說,沒有辦法用參數來指定這個行為,但是官網文檔保證 “即使在處理大量的返回結果時,依然能夠有***的表現”。

就算滿足請求的照片庫內容發生了改變,獲取方法所返回的 PHFetchResult 對象是不會自動更新。在后面的小節中,我們會介紹如何對返回的 PHFetchResult 對象的改變進行觀察并處理更新內容。

臨時集合 (Transient Collections)

你可能會發現你已經設計了一個可以操作資源集合的組件,并且你還希望它能夠處理任意一組的資源。PhotoKit 通過臨時資源集合,讓我們可以輕松做到這點。

你可以通過 PHAsset 對象數組或是包含資源的 PHFetchResult 對象來創建臨時資源集合。創建的操作在 PHAssetCollection 的 transientAssetCollectionWithAssets(...) 和 transientAssetCollectionWithFetchResult(...) 工廠方法內完成。這些方法創建出來的對象可以像其它的 PHAssetCollection 對象一樣使用。盡管如此,這些集合不會被存儲到用戶照片庫,自然也不會在照片應用中展示出來。

和資源集合相似,你可以用 PHCollectionList 中的 transientCollectionListWithXXX(...) 工廠方法來創建臨時集合列表。

當你要合并兩個獲取請求時,你就會發現這個東西非常有用。

照片元數據

正如文章開頭提到的,PhotoKit 提供了額外的關于用戶資源的元數據,而這些數據在以前使用 ALAssetsLibrary 框架中是沒有辦法訪問,或者很難訪問到。

HDR 和全景照片

你可以使用照片資源的 mediaSubtypes 屬性驗證資源庫中的圖像在捕捉時是否開啟了 HDR,拍攝時是否使用了相機應用的全景模式。

收藏和隱藏資源

要驗證一個資源是否被用戶標記為收藏或被隱藏,只要檢查 PHAsset 實例的 favorite 和 hidden 屬性即可。

連拍模式照片

對于一個資源,如果其 PHAsset 的 representsBurst 屬性為 true,則表示這個資源是一系列連拍照片中的代表照片 (多張照片是在用戶按住快門時拍攝的)。它還有一個屬性是 burstIdentifier,如果想要獲取連拍照片中的剩余的其他照片,可以通過將這個值傳入 fetchAssetsWithBurstIdentifier(...) 方法來獲取。

用戶可以在連拍的照片中做標記;此外,系統也會自動用各種試探來標記用戶可能會選擇的潛在代表照片。這個元數據是可以通過 PHAsset 的 burstSelectionTypes 屬性來訪問。這個屬性是用三個常量組成的位掩碼:.UserPick 表示用戶手動標記的資源,.AutoPick 表示用戶可能標記的潛在資源,.None 表示沒有標記的資源。

 

這個屏幕快照顯示了,照片應用是如何在連拍的照片中自動標記用戶可能標記的潛在資源。

照片加載

在處理用戶照片庫的過去幾年中,開發者創造了上百 (如果沒有上千) 的小技巧來提高照片加載和展示的效率。這些技巧處理請求的派發和取消,圖像大小的修改和裁剪,緩存等等。PhotoKit 提供了一個可以用更加便捷和現代的 API 做了所有這些操作的類:PHImageManager 。

請求圖像

圖像請求是通過 requestImageForAsset(...) 方法派發的。這個方法接受一個 PHAsset,可以設置返回圖像的大小和圖像的其它可選項 (通過 PHImageRequestOptions 參數對象設置),以及結果回調 (result handler)。這個方法的返回值可以用來在所請求的數據不再被需要時取消這個請求。

圖像的尺寸和裁剪

奇怪的是,對返回圖像的尺寸定義和裁剪的參數是分布在兩個地方的。targetSize 和 contentMode 這倆參數會被直接傳入 requestImageForAsset(...) 方法內。這個 content Mode 和 UIView 的 contentMode 參數類似,決定了照片應該以按比例縮放還是按比例填充的方式放到目標大小內。注意:如果不對照片大小進行修改或裁剪,那么方法參數是 PHImageManagerMaximumSize 和 PHImageContentMode.Default 。

此外,PHImageRequestOptions 還提供了一些方式來確定圖像管理器該以怎樣的方式來重新設置圖像大小。resizeMode 屬性可以設置為 .Exact (返回圖像必須和目標大小相匹配),.Fast (比 .Exact 效率更高,但返回圖像可能和目標大小不一樣) 或者 .None。還有個值得一提的是,normalizedCroppingMode 屬性讓我們確定圖像管理器應該如何裁剪圖像。注意:如果設置了 normalizedcroppingMode 的值,那么 resizeMode 需要設置為 .Exact。

請求遞送和進度

默認情況下,如果圖像管理器決定要用***策略,那么它會在將圖像的高質量版本遞送給你之前,先傳遞一個較低質量的版本。你可以通過 deliveryMode 屬性來控制這個行為;上面所描述的默認行為的值為 .Opportunistic。如果你只想要高質量的圖像,并且可以接受更長的加載時間,那么將屬性設置為 .HighQualityFormat。如果你想要更快的加載速度,且可以犧牲一點圖像質量,那么將屬性設置為 .FastFormat。

你可以使用 PHImageRequestOptions 的 synchronous 屬性,讓 requestImage... 系列的方法變成同步操作。注意:當 synchronous 設為 true 時,deliveryMode 屬性就會被忽略,并被當作 .HighQualityFormat 來處理。

在設置這些參數時,一定要考慮到你的一些用戶有可能開啟了 iCloud 照片庫,這點非常重要。PhotoKit 的 API 不一定會對設備的照片和 iCloud 上照片進行區分 —— 它們都用同一個 requestImage 方法來加載。這意味著任意一個圖像請求都有可能是一個通過蜂窩網絡來進行的非常緩慢的網絡請求。當你要用 .HighQualityFormat 或者做一個同步請求的時候,要牢記這個。注意:如果你想要確保請求不經過網絡,可以將 networkAccessAllowed 設為 false 。

另一個和 iCloud 相關的屬性是 progressHandler。你可以將它設為一個 PHAssetImageProgressHandler 的 block,當從 iCloud 下載照片時,它就會被圖像管理器自動調用。

資源版本

PhotoKit 允許應用對照片進行無損的修改。對編輯過的照片,系統會對單獨保存一份原始照片的拷貝和針對應用的調整數據。當用圖像管理器獲取資源時,你可以指定哪個版本的圖像資源應該通過 result handler 被遞送。這可以通過設置 version 屬性來做到:.Current 會遞送包含所有調整和修改的圖像;.Unadjusted 會遞送未被施加任何修改的圖像;.Original 會遞送原始的、***質量的格式的圖像 (例如 RAW 格式的數據。而當將屬性設置為 .Unadjusted 時,會遞送一個 JPEG)。

你可以在 Sam Davies 的文章《照片擴展》中,閱讀框架中更多關于這方面的內容。

結果回調 (result handler)

結果回調是一個包含了一個 UIImage 變量和一個 info 字典作為參數的 block。根據參數和請求的選項,在請求的整個生命周期,它可以被圖像管理器多次調用。

info 字典提供了關于當前請求狀態的信息,比如:

圖像是否必須從 iCloud 請求 (如果你初始化時將 networkAccessAllowed 設置成 false,那么就必須重新請求圖像) —— PHImageResultIsInCloudKey 。

當前遞送的 UIImage 是否是最終結果的低質量格式。當高質量圖像正在下載時,這個可以讓你給用戶先展示一個預覽圖像 —— PHImageResultIsDegradedKey。

請求 ID (可以便捷的取消請求),以及請求是否已經被取消 —— PHImageResultRequestIDKey 和 PHImageCancelledKey。

如果沒有圖像提供給 result handler,字典內還會有一個錯誤信息 —— PHImageErrorKey。

這些值可以讓你更新你的 UI 來告知用戶,和上面討論到的 progressHandler 一起,來表示出它們的加載狀態。

緩存

當圖像即將要展示在屏幕上時,比如當要在一組滾動的 collection 視圖上展示大量的資源圖像的縮略圖時,預先將一些圖像加載到內存中有時是非常有用的。PhotoKit 提供了一個 PHImageManager 的子類來處理這種特定的使用場景 —— PHImageCachingManager。

PHImageCachingManager 提供了一個關鍵方法 —— startCachingImagesForAssets(...)。你傳入一個 PHAssets 類型的數組,一些請求參數,以及一些請求單個圖像時即將用到的可選項。此外,還有一些方法可以讓你通知緩存管理器來停止緩存特定資源列表,以及停止緩存所有圖像。

allowsCachingHighQualityImages 屬性可以讓你指定圖像管理器是否應該準備高質量圖像。當緩存一個較短和不變的資源列表時,默認 true 的屬性表現很好。但當要在 collection 視圖上快速滑動時做緩存操作的話,***將它設置成 false 。

注意:以我的經驗,當用戶正在有大量資源的 collection 視圖上極其快速的滑動時,使用緩存管理器會損害滑動的表現效果。為這種特定的使用場景定制一個緩存行為是極其重要的。緩存窗口的大小,移動緩存窗口的時機和頻率,allowsCachingHighQualityImages 的屬性值 —— 這些參數都要在目標硬件上的真實照片庫中仔細地調節,并測試表現效果。更進一步,你可以考慮在用戶行為的基礎上,動態的設置這些參數。

請求圖像數據

***,除了請求普通的 UIImage 之外,PHImageManager 提供了另一個方法可以返回 NSData 對象類型的資源數據,包括它的通用類型標識符,圖像的展示方向。這個方法返回了這個資源的最多的信息。

滄海桑田,萬物變遷

我們已經討論了在用戶照片庫中請求資源的元數據,但是到目前為止,我們沒提及如何更新我們獲取的數據。照片庫本質上是一大堆可變的狀態,而***節中提到的照片實體是不可變的對象。PhotoKit 可以讓你接收你需要的、關于照片庫變動的所有信息,以正確更新你的緩存狀態。

觀察變化

首先,你需要通過共享的 PHPhotoLibrary 對象,用 registerChangeObserver(...) 方法注冊一個變化觀察者 (這個觀察者要遵從 PHPhotoLibraryChangeObserver 協議)。只要另一個應用或者用戶在照片庫中做的修改影響了你在變化前獲取的任何資源或資源集合的話,變化觀察者的 photoLibraryDidChange(...) 方法都會被調用。這個方法只有一個 PHChange 類型的參數,你可以用它來驗證這些變化是否和你所感興趣的獲取對象有關聯。

更新獲取的結果

PHChange 提供了幾個方法,讓你可以通過傳入任何你感興趣的 PHObject 對象或 PHFetchResult 對象來追蹤它們的變化。這幾個方法是 changeDetailsForObject(...) 和 changeDetailsForFetchResult(...) 。如果沒有任何變化,這些方法會返回 nil,否則你可以借助 PHObjectChangeDetails 或 PHFetchResultChangeDetails 對象來觀察這些變化。

PHObjectChangeDetails 提供了一個對***的照片實體對象的引用,以及告訴你對象的圖像數據是否曾變化過、對象是否曾被刪除過的布爾值。

PHFetchResultChangeDetails 封裝了施加在你之前通過獲取所得到的 PHFetchResult 上的變化的信息。PHFetchResultChangeDetails 是為了盡可能簡化 CollectionView 或 TableView 的更新操作而設計的。它的屬性恰好映射到你在使用一個典型的 CollectionView 的 update handler 時所需要的信息。注意,若要正確的更新 UITableView/UICollectionView,你必須以正確順序來處理變化,那就是:RICE —— removedIndexes,insertedIndexes,changedIndexes,enumerateMovesWithBlock (如果 hasMoves 為 true 的話)。另外,PHFetchResultChangeDetails 的 hasIncrementalChanges 屬性可以被設置成 false,這意味著舊的獲取結果應該全部被新的值代替。這種情況下,你應該調用 UITableView/UICollectionView 的 reloadData。

注意:沒有必要以集中的方式處理變化。如果你應用中的多個組件需要處理照片實體,那么它們每個都要有自己的 PHPhotoLibraryChangeObserver 。接著組件就能靠自己查詢 PHChange 對象,檢測是否需要 (以及如何) 更新它們自己的狀態。

隨風而變

現在我們已經知道了如何觀察用戶和其他應用造成的變化,我們來嘗試一下自己進行改變。

改變存在的對象

用 PhotoKit 在照片庫做改變,說到底其實是先創建了一個鏈接到某個資源或者資源集合的變化請求對象,再設置請求對象的相關屬性或調用合適的方法來描述你想要提交的變化。這個必須通過 performChanges(...) 方法,在提交到共享的 PHPhotoLibrary 的 block 內完成。注意:你需要準備好在 performChanges 方法的 completion block 里處理失敗的情況。雖然處理的是能被多個參與者 (如你的應用,用戶,其他應用,照片擴展等) 改變的狀態,但這個方式能提供安全性,也相對易用。

想要修改資源,需要創建一個 PHAssetChangeRequest 。然后你就可以修改創建創建日期,資源位置,以及是否將隱藏資源,是否將資源看做用戶收藏等。此外,你還可以從用戶的庫里刪除資源。

類似地,若要修改資源集合或集合列表,需要創建一個 PHAssetCollectionChangeRequest 或 PHCollectionListChangeRequest 對象。然后你就可以修改集合標題,添加或刪除集合成員,或者完全刪除集合。

在你的變化提交到用戶照片庫前,系統會向用戶展示一個明確的獲取權限的警告框。

創建新對象

創建一個新資源的做法和修改已存在的資源類似。只要用 creationRequestForAssetFromXXX(...) 工廠方法,來創建變化請求,并傳入資源圖像數據 (或一個 URL)。如果你需要對新建的資源做額外的修改,你可以用創建變化請求的 placeholderForCreatedAsset 屬性。它會返回一個可用的 placeholder 來代替“真實的” PHAsset 引用。

結論

我已經討論了 PhotoKit 的基礎知識,但仍然還有非常多的東西等著我們去發掘。你可以通過查看示例的各處的代碼,觀看 WWDC session 視頻學習更多內容,發掘更深的知識,然后寫一些自己的代碼!PhotoKit 為 iOS 開發者開啟了通往新世界可能性,在未來的數月或者數年里,我們肯定會看到更多基于這個基礎構建的富有創造性的優秀產品。
 

責任編輯:chenqingxiang 來源: obj中國
相關推薦

2023-04-12 18:36:20

IO框架內核

2015-08-25 14:25:54

objc_msgsen

2015-04-17 16:30:46

swiftOC

2021-05-07 20:01:23

IO輸入輸出

2020-06-17 16:43:40

網絡IO框架

2014-08-27 09:45:30

JavaScriptJavaScript

2011-06-03 17:29:09

TapLynxPush.IO移動應用

2019-03-26 08:15:45

iOS尾調用Objective-C

2017-07-18 16:00:09

炫酷動畫開源框架APP

2021-07-09 19:04:55

Cache查找消息

2014-08-18 11:06:47

js框架Node.js

2016-12-12 14:55:01

AndroidAndroid Vie

2015-02-05 00:18:44

SwiftObjective-C

2015-08-13 10:28:07

Cobjc_msgSen匯編

2023-12-06 07:28:47

阻塞IO異步IO

2021-09-30 07:26:15

磁盤IO網絡

2021-01-09 13:59:49

異步IO驅動式

2021-06-21 11:11:29

LinuxIO磁盤IO

2017-11-02 13:19:54

手機 備份

2014-05-08 09:37:09

Fedora 21發布日程
點贊
收藏

51CTO技術棧公眾號

久久婷婷国产精品| 国产精品第一第二| 精品视频站长推荐| 日韩av福利| 国产欧美一二三区| 亚洲精品女av网站| 91美女免费看| 91欧美大片| 亚洲国产精品热久久| 日韩黄色片视频| 免费av在线播放| 国产成人a级片| 国产成人亚洲精品| 精品国产乱码久久久久久鸭王1| 精品福利一区| 欧美日韩国产高清一区| 蜜臀av无码一区二区三区| youjizz在线播放| heyzo一本久久综合| 国产在线观看精品一区二区三区| 国产一级性生活| 久久人体视频| 日韩精品中文字幕在线播放| 久久精品一卡二卡| 第四色男人最爱上成人网| 一个色妞综合视频在线观看| 亚洲电影网站| 日韩专区一区二区| 成人黄色在线看| 成人福利视频在线观看| 日本免费精品视频| 亚洲区一区二| 欧美多人爱爱视频网站| 亚洲色图27p| 精品国内自产拍在线观看视频| 精品国产污污免费网站入口 | 男人的天堂成人在线| 久久久精品在线观看| 五月天精品视频| 乱亲女h秽乱长久久久| 日韩一区二区三区四区五区六区| 美女网站视频黄色| 成人av观看| 午夜国产精品一区| 日韩一二区视频| 黄色精品免费看| 国产精品久久久久天堂| 亚洲mv在线看| 日本在线www| 国产精品美女久久福利网站| 三区精品视频观看| 成人av电影观看| 久久久久9999亚洲精品| 免费观看国产成人| 欧洲综合视频| 26uuu国产电影一区二区| 精品欧美国产| 欧美少妇另类| 国产情人综合久久777777| 欧美亚洲免费高清在线观看 | 日韩在线视频免费观看| 亚洲色图第四色| 成人在线免费观看网站| www.日韩视频| 日韩黄色免费观看| 在线观看不卡| 日本伊人精品一区二区三区介绍| www.中文字幕在线观看| 日韩专区中文字幕一区二区| 国产精品男女猛烈高潮激情| 曰批又黄又爽免费视频| 开心九九激情九九欧美日韩精美视频电影| 国产精品一区二区3区| 一本到在线视频| 国产精品主播直播| 精品国产一区二区三区四区vr | 久久精品欧美日韩| 亚洲精品国产精品国自产| 九色porny在线| 亚洲一区二区三区四区在线| 国产资源在线视频| 另类小说第一页| 欧美一级片免费在线观看| 欧美高清视频手机在在线| 久久亚洲精品网站| 久久精品无码人妻| 久久激情综合| 国产自摸综合网| 丰满岳乱妇国产精品一区| 91麻豆.com| 一级日韩一区在线观看| 蜜臀av在线播放| 色综合久久中文综合久久牛| 午夜剧场高清版免费观看| 这里视频有精品| 亚洲欧美中文日韩在线v日本| 国产午夜精品福利视频| 欧美性色综合| 国产成人午夜视频网址| www.久久色| 国产午夜精品一区二区三区视频| 免费在线精品视频| 中文在线а√天堂| 欧美一区二区在线看| 中文字幕在线免费看线人| 999视频精品| 欧洲美女免费图片一区| 国产精品久久久久久久久毛片| 成人激情视频网站| 中文字幕一区综合| 蜜臀久久精品| 91精品国产福利在线观看 | 老汉色老汉首页av亚洲| 日韩中文字幕网站| www.伊人久久| 国产成a人亚洲精品| 视频一区二区精品| 九色porny丨国产首页在线| 69堂成人精品免费视频| 欧美熟妇一区二区| 伊人久久综合| av成人在线电影| 午夜视频在线观看网站| 色综合视频一区二区三区高清| 国产精品无码自拍| 91精品国产调教在线观看| 国产精品av在线| 手机看片国产1024| 亚洲最新视频在线观看| 亚洲欧美手机在线| 第九色区aⅴ天堂久久香| 欧美自拍视频在线| 四虎在线观看| 欧美日韩国产影院| 国产精品久久久久久久无码| 欧美涩涩视频| 91在线精品观看| av中文字幕在线播放| 在线不卡a资源高清| 久久精品电影网站| www.av麻豆| 懂色av一区二区三区免费看| 亚洲日本在线a| 免费观看中文字幕| 亚洲三级在线| 久久精品久久久久电影| 在线免费观看高清视频| 中文字幕第一区第二区| 天天操天天摸天天爽| 国产真实有声精品录音| 国产精品91免费在线| 男人天堂网在线| 色狠狠一区二区三区香蕉| 波多野结衣a v在线| 久久精品午夜| 视频一区视频二区视频三区高 | 国产精品久久久久av| 黄色av网站在线看| 在线一区二区观看| 国产第一页精品| 久久99国产精品久久99| 最新av在线免费观看| 亚洲精品18| 欧美激情2020午夜免费观看| 欧美熟妇另类久久久久久不卡| 亚洲.国产.中文慕字在线| 无码精品一区二区三区在线播放| 99av国产精品欲麻豆| 免费在线成人av电影| 欧美特大特白屁股xxxx| 色噜噜狠狠色综合网图区| 99国产精品欲| 亚洲h精品动漫在线观看| 91精品人妻一区二区| 久草中文在线| 成人小视频免费在线观看| 性欧美大战久久久久久久| 台湾佬综合网| 国产精品影片在线观看| 97超碰资源站在线观看| 亚洲精品成人久久电影| 中文字幕在线天堂| 亚洲人成网站影音先锋播放| 成人做爰www看视频软件| 香蕉久久夜色精品国产| 亚洲图片小说在线| 在这里有精品| 国产成人鲁鲁免费视频a| sm国产在线调教视频| 亚洲国产精品久久91精品| 中文字幕一区二区人妻电影| 中文字幕欧美一| jlzzjizz在线播放观看| 蜜臀av国产精品久久久久| 欧美国产综合在线| 国产一区二区三区91| 1卡2卡3卡精品视频| 亚洲精华液一区二区三区| www.欧美免费| 欧美女优在线观看| 日韩免费高清视频| 中国一级片黄色一级片黄| 亚洲大型综合色站| 三级黄色免费观看| 久久一区二区三区四区| 在线观看免费看片| 日本aⅴ免费视频一区二区三区| www.日本在线视频| 91嫩草亚洲精品| 欧美三日本三级少妇三99| 97久久超碰| 国产一区视频在线| 激情开心成人网| 国内精品久久久久久中文字幕| 天堂中文8资源在线8| 亚洲欧美日韩国产成人| 国产香蕉在线观看| 欧美电影在线免费观看| 日韩免费av网站| 精品欧美aⅴ在线网站| 欧美成人aaa片一区国产精品| 中文字幕av不卡| 丰满少妇高潮一区二区| heyzo一本久久综合| 日批视频免费看| 国产精品一二三区在线| 一级黄色在线播放| 捆绑调教一区二区三区| 日日躁夜夜躁aaaabbbb| 日韩中文字幕一区二区三区| 无码aⅴ精品一区二区三区浪潮| 黄色av一区| 高清无码一区二区在线观看吞精| 五月久久久综合一区二区小说| 深夜福利成人| 欧美丝袜激情| 日韩精品欧美一区二区三区| 久9久9色综合| 欧美一区1区三区3区公司| 日韩欧美美女在线观看| 精品在线视频一区二区| 欧美电影完整版在线观看| 国产手机精品在线| 韩国女主播一区二区三区| 国产高清不卡av| www.久久东京| 国产精品xxxx| 女人抽搐喷水高潮国产精品| 精品综合在线| 一道本一区二区三区| 欧美欧美一区二区| 久操精品在线| 一区二区免费电影| 国产精品二区不卡| 在线视频欧美一区| 亚洲影视一区二区三区| 成人高清dvd| 影音先锋久久| 蜜臀av午夜一区二区三区| 日韩高清不卡一区二区三区| 亚洲综合日韩欧美| 国产麻豆一精品一av一免费| 中文字幕在线视频播放| 91蝌蚪国产九色| 亚洲午夜精品久久久久久高潮| 国产精品入口麻豆九色| 精国产品一区二区三区a片| 亚洲成人自拍一区| 一本一道无码中文字幕精品热| 欧美中文字幕久久| 国产手机av在线| 亚洲大胆人体av| 你懂的在线播放| 中文字幕亚洲无线码在线一区| 国产精品一卡二卡三卡| 欧美精品国产精品日韩精品| 成人美女视频| 成人激情视频免费在线| 久久99精品久久久久久欧洲站| 久久狠狠久久综合桃花| 日韩欧美一区二区三区在线视频| 毛片在线视频观看| 亚洲欧美春色| 日本一本在线视频| www国产亚洲精品久久麻豆| 香蕉久久久久久久| 亚洲狠狠爱一区二区三区| 一级黄色在线观看| 日韩久久免费av| 成年人在线观看| 久久久久久久av| 欧美videos粗暴| 国产精品有限公司| 日本在线电影一区二区三区| 国产精品久久久久9999爆乳| 日韩精品亚洲专区| 最新版天堂资源在线| 国产精品每日更新在线播放网址| 日本熟女一区二区| 欧美日韩国产首页| 亚洲欧洲综合在线| 精品中文字幕视频| 国产精品久久久久久妇女| 国产精品国产三级国产专区53| 性欧美在线视频| 免费成人av在线| 李丽珍裸体午夜理伦片| 国产精品久久久久久久岛一牛影视| 国产一级二级毛片| 欧美精品在线观看一区二区| 亚洲欧美日本在线观看| 久久综合网hezyo| 精品肉辣文txt下载| 国产精品亚洲一区| 亚洲国产精品成人| 日本888xxxx| 久久久不卡网国产精品二区| 国产无遮挡又黄又爽在线观看| 欧美日韩三级一区二区| 你懂的好爽在线观看| 久久免费少妇高潮久久精品99| 日本免费成人| 日韩精品久久久| 久久亚洲不卡| 亚洲av无码一区二区三区观看| 洋洋av久久久久久久一区| 国产人妖一区二区三区| 日韩视频欧美视频| 电影一区二区| 日韩电影免费观看在| 久久久久.com| 少妇按摩一区二区三区| 天天综合网天天综合色| 欧日韩在线视频| 久久久久久久999精品视频| 日韩在线视频一区二区三区 | 亚洲色图插插| 不卡中文字幕在线观看| 国产精品蜜臀在线观看| 国产三级理论片| 在线成人中文字幕| 久久91导航| 五月天亚洲综合情| 秋霞成人午夜伦在线观看| 色综合99久久久无码国产精品| 一本大道综合伊人精品热热 | 美女av一区二区| 成人国产精品久久| 9色视频在线观看| 国产成人在线色| 国产污视频在线观看| 亚洲精品二三区| 日韩av福利| 一区二区三区在线观看www| 久久草av在线| 欧美爱爱小视频| 亚洲激情自拍图| 老司机成人影院| 亚洲欧美综合一区| 国产精品亚洲成人| 日韩欧美亚洲国产| 亚洲男人天堂2024| 开心久久婷婷综合中文字幕 | 性欧美精品高清| 大胸美女被爆操| 91精品欧美一区二区三区综合在| av免费网站在线观看| 99久久99久久| 亚洲一区二区三区四区五区午夜 | 五月激情婷婷在线| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲国产综合网| 51ⅴ精品国产91久久久久久| 国内精品久久久久久99蜜桃| 亚洲va在线va天堂va偷拍| 亚洲夂夂婷婷色拍ww47 | 日本综合精品一区| 国产av麻豆mag剧集| 国产日韩欧美高清在线| 99热精品在线播放| 欧美亚洲国产日韩2020| 青青草97国产精品麻豆| 老司机av网站| 欧美特级www| 国产日产一区二区三区| 欧美lavv| 国产酒店精品激情| 久久久成人免费视频| 久久夜精品va视频免费观看| 久9re热视频这里只有精品| 欧美女同在线观看| 亚洲成人一区在线| 在线观看麻豆| 久久99精品久久久久子伦| 久久99精品网久久| 亚洲久久在线观看| 久99久在线视频| 欧美日韩在线播放视频| 成人做爰www看视频软件| 欧美人与性动xxxx|