iOS系統(tǒng)相冊基本操作

一、前言####

在iOS8以前媳拴,我們操作系統(tǒng)相冊黄橘,一般使用<AssetsLibrary/AssetsLibrary.h>庫進行操作,iOS8以后屈溉,Apple推出了<Photos/Photos.h>庫塞关,以提升操作系統(tǒng)相冊的效率。針對目前iOS8及以上用戶占有率已超過95%子巾,本文將采用<Photos/Photos.h>庫進行開發(fā)說明帆赢。

二小压、針對系統(tǒng)相冊的操作####

思路:為了滿足保存視頻/圖片到系統(tǒng)相冊指定路徑,并隨時準備刪除的變態(tài)需求椰于,首先得弄清<Photos/Photos.h>庫怠益,保存一般都好說,但是想刪除系統(tǒng)相冊中的某個圖片或者視頻廉羔,第一印象就根據保存的文件名來進行刪除溉痢,可是使用過該api之后,發(fā)現(xiàn)存在系統(tǒng)相冊之后的名字根本就不是你原來存的那個名字憋他,fileName也沒有對外提供給你使用孩饼,但是它提供了localIdentifier字段,用來唯一標識系統(tǒng)相冊中的元素竹挡,那么事情就好辦了镀娶,我們在進行保存圖片或者視頻的時候,將其localIdentifier緩存到一個plist文件中揪罕,然后每次刪除的時候梯码,通過對應的文件名找到相應的localIdentifier就可以進行刪除了。

  • 判斷系統(tǒng)相冊中是否存在該指定的文件夾
- (BOOL)isExistFolder:(NSString *)folderName {
    //首先獲取用戶手動創(chuàng)建相冊的集合
    PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
    
    __block BOOL isExisted = NO;
    //對獲取到集合進行遍歷
    [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        PHAssetCollection *assetCollection = obj;
        //folderName是我們寫入照片的相冊
        if ([assetCollection.localizedTitle isEqualToString:folderName])  {
            isExisted = YES;
        }
    }];
    
    return isExisted;
}
  • 在系統(tǒng)相冊中創(chuàng)建指定的文件夾
- (void)createFolder:(NSString *)folderName {
    if (![self isExistFolder:folderName]) {
        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
            //添加HUD文件夾
            [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:folderName];
            
        } completionHandler:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                NSLog(@"創(chuàng)建相冊文件夾成功!");
            } else {
                NSLog(@"創(chuàng)建相冊文件夾失敗:%@", error);
            }
        }];
    }
}
  • 保存圖片到系統(tǒng)相冊指定目錄
- (void)saveImagePath:(NSString *)imagePath{
    NSURL *url = [NSURL fileURLWithPath:imagePath];
    
    //標識保存到系統(tǒng)相冊中的標識
    __block NSString *localIdentifier;
    
    //首先獲取相冊的集合
    PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
    //對獲取到集合進行遍歷
    [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        PHAssetCollection *assetCollection = obj;
        //Camera Roll是我們寫入照片的相冊
        if ([assetCollection.localizedTitle isEqualToString:_folderName])  {
            [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                //請求創(chuàng)建一個Asset
                PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:url];
                //請求編輯相冊
                PHAssetCollectionChangeRequest *collectonRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
                //為Asset創(chuàng)建一個占位符好啰,放到相冊編輯請求中
                PHObjectPlaceholder *placeHolder = [assetRequest placeholderForCreatedAsset];
                //相冊中添加照片
                [collectonRequest addAssets:@[placeHolder]];
                
                localIdentifier = placeHolder.localIdentifier;
            } completionHandler:^(BOOL success, NSError *error) {
                if (success) {
                    NSLog(@"保存圖片成功!");
                    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[self readFromPlist]];
                    [dict setObject:localIdentifier forKey:[self showFileNameFromPath:imagePath]];
                    [self writeDicToPlist:dict];
                } else {
                    NSLog(@"保存圖片失敗:%@", error);
                }
            }];
        }
    }];
}
  • 保存視頻到系統(tǒng)相冊指定目錄

- (void)saveVideoPath:(NSString *)videoPath {
    NSURL *url = [NSURL fileURLWithPath:videoPath];
    
    //標識保存到系統(tǒng)相冊中的標識
    __block NSString *localIdentifier;
    
    //首先獲取相冊的集合
    PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
    //對獲取到集合進行遍歷
    [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        PHAssetCollection *assetCollection = obj;
        //folderName是我們寫入照片的相冊
        if ([assetCollection.localizedTitle isEqualToString:_folderName])  {
            [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                //請求創(chuàng)建一個Asset
                PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
                //請求編輯相冊
                PHAssetCollectionChangeRequest *collectonRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
                //為Asset創(chuàng)建一個占位符轩娶,放到相冊編輯請求中
                PHObjectPlaceholder *placeHolder = [assetRequest placeholderForCreatedAsset];
                //相冊中添加視頻
                [collectonRequest addAssets:@[placeHolder]];
                
                localIdentifier = placeHolder.localIdentifier;
            } completionHandler:^(BOOL success, NSError *error) {
                if (success) {
                    NSLog(@"保存視頻成功!");
                    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[self readFromPlist]];
                    [dict setObject:localIdentifier forKey:[self showFileNameFromPath:videoPath]];
                    [self writeDicToPlist:dict];
                } else {
                    NSLog(@"保存視頻失敗:%@", error);
                }
            }];
        }
    }];
}
  • 刪除系統(tǒng)相冊指定目錄下的文件
- (void)deleteFile:(NSString *)filePath {
    if ([self isExistFolder:_folderName]) {
        //獲取需要刪除文件的localIdentifier
        NSDictionary *dict = [self readFromPlist];
        NSString *localIdentifier = [dict valueForKey:[self showFileNameFromPath:filePath]];
        
        PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
        [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            PHAssetCollection *assetCollection = obj;
            if ([assetCollection.localizedTitle isEqualToString:_folderName])  {
                PHFetchResult *assetResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:[PHFetchOptions new]];
                [assetResult enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                    PHAsset *asset = obj;
                    if ([localIdentifier isEqualToString:asset.localIdentifier]) {
                        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                            [PHAssetChangeRequest deleteAssets:@[obj]];
                        } completionHandler:^(BOOL success, NSError *error) {
                            if (success) {
                                NSLog(@"刪除成功!");
                                NSMutableDictionary *updateDic = [NSMutableDictionary dictionaryWithDictionary:dict];
                                [updateDic removeObjectForKey:[self showFileNameFromPath:filePath]];
                                [self writeDicToPlist:updateDic];
                            } else {
                                NSLog(@"刪除失敗:%@", error);
                            }
                        }];
                    }
                }];
            }
        }];
    }
}
下面給出具體的實現(xiàn)代碼:######

頭文件定義如下:

#import <Foundation/Foundation.h>

@interface YQAssetOperator : NSObject

/**
 *  初始化方法
 *
 *  @param folderName 操作的目錄文件
 *
 *  @return 操作對象
 */
- (instancetype)initWithFolderName:(NSString *)folderName;

/**
 *  保存圖片到系統(tǒng)相冊
 *
 *  @param imagePath  保存的圖片路徑
 *  @param folderName 目的文件的路徑
 */
- (void)saveImagePath:(NSString *)imagePath;

/**
 *  保存視頻到系統(tǒng)相冊
 *
 *  @param videoPath  保存的視頻路徑
 *  @param folderName 目的文件的路徑
 */
- (void)saveVideoPath:(NSString *)videoPath;

/**
 *  刪除系統(tǒng)相冊中的文件
 *
 *  @param filePath   文件的路徑
 *  @param folderName 文件夾的名字
 */
- (void)deleteFile:(NSString *)filePath;

@end

實現(xiàn)文件:

#import "YQAssetOperator.h"
#import <Photos/Photos.h>

@interface YQAssetOperator ()

@property (nonatomic, copy) NSString *plistName;
@property (nonatomic, copy) NSString *folderName;

@end

@implementation YQAssetOperator

- (instancetype)initWithFolderName:(NSString *)folderName {
    self = [self init];
    if (self) {
        self.plistName = @"Asset";
        self.folderName = folderName;
    }
    return self;
}

- (void)saveImagePath:(NSString *)imagePath{
    NSURL *url = [NSURL fileURLWithPath:imagePath];
    
    //標識保存到系統(tǒng)相冊中的標識
    __block NSString *localIdentifier;
    
    //首先獲取相冊的集合
    PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
    //對獲取到集合進行遍歷
    [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        PHAssetCollection *assetCollection = obj;
        //Camera Roll是我們寫入照片的相冊
        if ([assetCollection.localizedTitle isEqualToString:_folderName])  {
            [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                //請求創(chuàng)建一個Asset
                PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:url];
                //請求編輯相冊
                PHAssetCollectionChangeRequest *collectonRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
                //為Asset創(chuàng)建一個占位符,放到相冊編輯請求中
                PHObjectPlaceholder *placeHolder = [assetRequest placeholderForCreatedAsset];
                //相冊中添加照片
                [collectonRequest addAssets:@[placeHolder]];
                
                localIdentifier = placeHolder.localIdentifier;
            } completionHandler:^(BOOL success, NSError *error) {
                if (success) {
                    NSLog(@"保存圖片成功!");
                    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[self readFromPlist]];
                    [dict setObject:localIdentifier forKey:[self showFileNameFromPath:imagePath]];
                    [self writeDicToPlist:dict];
                } else {
                    NSLog(@"保存圖片失敗:%@", error);
                }
            }];
        }
    }];
}

- (void)saveVideoPath:(NSString *)videoPath {
    NSURL *url = [NSURL fileURLWithPath:videoPath];
    
    //標識保存到系統(tǒng)相冊中的標識
    __block NSString *localIdentifier;
    
    //首先獲取相冊的集合
    PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
    //對獲取到集合進行遍歷
    [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        PHAssetCollection *assetCollection = obj;
        //folderName是我們寫入照片的相冊
        if ([assetCollection.localizedTitle isEqualToString:_folderName])  {
            [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                //請求創(chuàng)建一個Asset
                PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
                //請求編輯相冊
                PHAssetCollectionChangeRequest *collectonRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
                //為Asset創(chuàng)建一個占位符框往,放到相冊編輯請求中
                PHObjectPlaceholder *placeHolder = [assetRequest placeholderForCreatedAsset];
                //相冊中添加視頻
                [collectonRequest addAssets:@[placeHolder]];
                
                localIdentifier = placeHolder.localIdentifier;
            } completionHandler:^(BOOL success, NSError *error) {
                if (success) {
                    NSLog(@"保存視頻成功!");
                    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[self readFromPlist]];
                    [dict setObject:localIdentifier forKey:[self showFileNameFromPath:videoPath]];
                    [self writeDicToPlist:dict];
                } else {
                    NSLog(@"保存視頻失敗:%@", error);
                }
            }];
        }
    }];
}

- (void)deleteFile:(NSString *)filePath {
    if ([self isExistFolder:_folderName]) {
        //獲取需要刪除文件的localIdentifier
        NSDictionary *dict = [self readFromPlist];
        NSString *localIdentifier = [dict valueForKey:[self showFileNameFromPath:filePath]];
        
        PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
        [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            PHAssetCollection *assetCollection = obj;
            if ([assetCollection.localizedTitle isEqualToString:_folderName])  {
                PHFetchResult *assetResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:[PHFetchOptions new]];
                [assetResult enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                    PHAsset *asset = obj;
                    if ([localIdentifier isEqualToString:asset.localIdentifier]) {
                        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                            [PHAssetChangeRequest deleteAssets:@[obj]];
                        } completionHandler:^(BOOL success, NSError *error) {
                            if (success) {
                                NSLog(@"刪除成功!");
                                NSMutableDictionary *updateDic = [NSMutableDictionary dictionaryWithDictionary:dict];
                                [updateDic removeObjectForKey:[self showFileNameFromPath:filePath]];
                                [self writeDicToPlist:updateDic];
                            } else {
                                NSLog(@"刪除失敗:%@", error);
                            }
                        }];
                    }
                }];
            }
        }];
    }
    
}

- (BOOL)isExistFolder:(NSString *)folderName {
    //首先獲取用戶手動創(chuàng)建相冊的集合
    PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
    
    __block BOOL isExisted = NO;
    //對獲取到集合進行遍歷
    [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        PHAssetCollection *assetCollection = obj;
        //folderName是我們寫入照片的相冊
        if ([assetCollection.localizedTitle isEqualToString:folderName])  {
            isExisted = YES;
        }
    }];
    
    return isExisted;
}

- (void)createFolder:(NSString *)folderName {
    if (![self isExistFolder:folderName]) {
        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
            //添加HUD文件夾
            [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:folderName];
            
        } completionHandler:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                NSLog(@"創(chuàng)建相冊文件夾成功!");
            } else {
                NSLog(@"創(chuàng)建相冊文件夾失敗:%@", error);
            }
        }];
    }
}

#pragma mark - setters和getters
- (void)setFolderName:(NSString *)folderName {
    if (!_folderName) {
        _folderName = folderName;
        [self createFolder:folderName];
    }
}

- (void)setPlistName:(NSString *)plistName {
    if (!_plistName) {
        _plistName = plistName;
        
        //創(chuàng)建plist文件鳄抒,記錄path和localIdentifier的對應關系
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
        NSString *path = [paths objectAtIndex:0];
        NSString *filePath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", plistName]];
        NSLog(@"plist路徑:%@", filePath);
        NSFileManager* fm = [NSFileManager defaultManager];
        if (![fm fileExistsAtPath:filePath]) {
            BOOL success = [fm createFileAtPath:filePath contents:nil attributes:nil];
            if (!success) {
                NSLog(@"創(chuàng)建plist文件失敗!");
            } else {
                NSLog(@"創(chuàng)建plist文件成功!");
            }
        } else {
            NSLog(@"沙盒中已有該plist文件,無需創(chuàng)建!");
        }
    }
}

#pragma mark - 寫入plist文件
- (void)writeDicToPlist:(NSDictionary *)dict {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *path = [paths objectAtIndex:0];
    NSString *filePath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", _plistName]];
    [dict writeToFile:filePath atomically:YES];
}

#pragma mark - 讀取plist文件
- (NSDictionary *)readFromPlist {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *path = [paths objectAtIndex:0];
    NSString *filePath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", _plistName]];
    return [NSDictionary dictionaryWithContentsOfFile:filePath];
}

#pragma mark - 根據路徑獲取文件名
- (NSString *)showFileNameFromPath:(NSString *)path {
    return [NSString stringWithFormat:@"%@", [[path componentsSeparatedByString:@"/"] lastObject]];
}

@end

測試程序:

#import "ViewController.h"
#import "YQAssetOperator.h"

@interface ViewController (){
    YQAssetOperator *_assetOperator;
}

- (IBAction)deleteFile:(UIButton *)sender;
- (IBAction)addFiles:(UIButton *)sender;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor grayColor];
    _assetOperator = [[YQAssetOperator alloc] initWithFolderName:@"LOVE"];
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)deleteFile:(UIButton *)sender {
    NSString *videoPath =[[NSBundle mainBundle] pathForResource:@"0425_103546" ofType:@"mp4"];
    [_assetOperator deleteFile:videoPath];
}

- (IBAction)addFiles:(UIButton *)sender {
    //保存圖片
    NSString *imagePath =[[NSBundle mainBundle] pathForResource:@"scanner" ofType:@"png"];
    [_assetOperator saveImagePath:imagePath];
    
    //保存視頻
    NSString *videoPath =[[NSBundle mainBundle] pathForResource:@"0425_103546" ofType:@"mp4"];
    [_assetOperator saveVideoPath:videoPath];
}

@end

測試程序將一個二維碼圖片和一段視頻存入了"LOVE"文件夾中椰弊,效果圖如下:

效果圖

源碼地址:https://github.com/GitterYang/YQSystemPhotoOperation

如有什么疑問或者文中有不當之處许溅,請指出,謝謝秉版。祝大家好夢贤重!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市清焕,隨后出現(xiàn)的幾起案子并蝗,更是在濱河造成了極大的恐慌,老刑警劉巖秸妥,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件借卧,死亡現(xiàn)場離奇詭異,居然都是意外死亡筛峭,警方通過查閱死者的電腦和手機铐刘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來影晓,“玉大人镰吵,你說我怎么就攤上這事檩禾。” “怎么了疤祭?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵盼产,是天一觀的道長。 經常有香客問我勺馆,道長戏售,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任草穆,我火速辦了婚禮灌灾,結果婚禮上,老公的妹妹穿的比我還像新娘悲柱。我一直安慰自己锋喜,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布豌鸡。 她就那樣靜靜地躺著嘿般,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涯冠。 梳的紋絲不亂的頭發(fā)上炉奴,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音蛇更,去河邊找鬼瞻赶。 笑死,一個胖子當著我的面吹牛械荷,可吹牛的內容都是我干的共耍。 我是一名探鬼主播虑灰,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼吨瞎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了穆咐?” 一聲冷哼從身側響起颤诀,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎对湃,沒想到半個月后崖叫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拍柒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年心傀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拆讯。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡脂男,死狀恐怖养叛,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情宰翅,我是刑警寧澤弃甥,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站汁讼,受9級特大地震影響淆攻,放射性物質發(fā)生泄漏。R本人自食惡果不足惜嘿架,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一瓶珊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眶明,春花似錦艰毒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜀肘,卻和暖如春绊汹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扮宠。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工西乖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坛增。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓获雕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親收捣。 傳聞我的和親對象是個殘疾皇子届案,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件罢艾、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,745評論 25 707
  • 不約大醉俠閱讀 173評論 0 0
  • 背叛與罪惡楣颠,黑夜與半天,孤獨與寂寞咐蚯,殘忍與決絕…… 桐原亮司死時童漩,雪穗說:“我不認識他〈悍妫” 一句話矫膨,將整本書的氛圍...
    秋之雨閱讀 279評論 0 1