iOS 小知识点总结

1. Xcode 修改模板:在此路径中修改相应的模板

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File\ Templates/Source/Cocoa\ Touch\ Class.xctemplate
宏的意义

2. [!] Failed to connect to GitHub to update the CocoaPods/Specs specs repo - Please check if you are offline, or that GitHub is down

Github在不久之前的2018年2月23号移除了一些低加密标准协议,包括TLSv1/TLSv1.1,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,相关链接在这里:Weak cryptographic standards removed
这就意味着Mac系统对应的openssl也需要更新。升级办法:stackoverflow

$ pod repo remove master
$ pod setup
$ pod install
$ pod install
Setting up CocoaPods master repo
  $ /usr/bin/git clone https://github.com/CocoaPods/Specs.git master --progress
  Cloning into 'master'...
  remote: Counting objects: 2013972, done.        
  remote: Compressing objects: 100% (424/424), done.        
  remote: Total 2013972 (delta 185), reused 35 (delta 35), pack-reused 2013484        
  Receiving objects: 100% (2013972/2013972), 524.06 MiB | 921.00 KiB/s, done.
  Resolving deltas: 100% (1128315/1128315), done.
  Checking out files: 100% (224716/224716), done.

CocoaPods 1.5.0.beta.1 is available.
To update use: `sudo gem install cocoapods --pre`
[!] This is a test version we'd love you to try.

For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.5.0.beta.1
2018.8.28  https://gems.ruby-china.org/  域名更新为     https://gems.ruby-china.com

更新macOS High Sierra 11.3 报错:-bash: /usr/local/bin/pod: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby: bad interpreter: No such file or directory

$ brew reinstall cocoapods
$ brew install ruby
$ brew link --overwrite cocoapods

ERROR: While executing gem ... (TypeError) no implicit conversion of nil into String

$ sudo gem install cocoapods
Password:
ERROR:  While executing gem ... (TypeError)
    no implicit conversion of nil into String
$ sudo gem update --system  //先更新 Ruby

3. 各种波纹动画

YSCAnimation

4. collectionView瞧不出的方法

//定义每个Cell的大小
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    CGSize size = CGSizeMake(80,80);
    return size;
}
//定义每个Section的四边间距
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
    return UIEdgeInsetsMake(15, 15, 5, 15);//分别为上、左、下、右
}
//这个是两行cell之间的间距(上下行cell的间距)
-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{
    return 0.8;
}
//两个cell之间的间距(同一行的cell的间距)
-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{
     return 0.8;
}

5. 图片

1.拉伸

UIImageView *backImgV = [RJInitViewTool rj_initImageViewWithSuperView:self.contentView];
    UIImage *image = [UIImage imageNamed:@"product_detail_pinglun_bg"];
    // 左端盖宽度
    NSInteger leftCapWidth = image.size.width * 0.5f;
    // 顶端盖高度
    NSInteger topCapHeight = image.size.height * 0.5f;
    // 重新赋值
    image = [image stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:topCapHeight];
    backImgV.image = image;

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight __TVOS_PROHIBITED;
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets NS_AVAILABLE_IOS(5_0); // create a resizable version of this image. the interior is tiled when drawn.

2.旋转

UIImage *img = [UIImage imageNamed:@"homepage_genggai"];
    UIImage *image = [UIImage imageWithCGImage:img.CGImage scale:2.0 orientation:UIImageOrientationRight];
    imageView.image = image;

3.改变图片颜色

- (UIImage *)imageWithColor:(UIColor *)color image:(UIImage *)image{
    UIGraphicsBeginImageContextWithOptions(image.size, NO, 1);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(context, 0, image.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextSetBlendMode(context, kCGBlendModeNormal);
    CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
    CGContextClipToMask(context, rect, image.CGImage);
    [color setFill];
    CGContextFillRect(context, rect);
    UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

4.View的内容生成一张图片

/*UIGraphicsBeginImageContextWithOptions
 CGSize size 区域大小
 BOOL opaque 是否是非透明的。如果需要显示半透明效果,需要传NO,否则传YES
 CGFloat scale 屏幕密度
 */
+(UIImage *)hbsc_imageFromView:(UIView *)view{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

6. UILabel放入图片

UILabel *imageLabel = [UILabel new];
    NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
    attachment.image = [UIImage imageNamed:@"product_detail_daijinquan"];
    attachment.bounds = CGRectMake(0, 0, 15, 15);
    NSAttributedString *attributedString = [NSAttributedString attributedStringWithAttachment:attachment];
    imageLabel.attributedText = attributedString;

7. iPhoneX(20 --> 44)

[[UIApplication sharedApplication] statusBarFrame].size.height]

#define KIsiPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

//frame布局
if (@available(iOS 11.0, *)) {
    self.view.safeAreaInsets.bottom
}else {

}
//masonry布局
if (@available(iOS 11.0, *)) {
    make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
} else {
    make.bottom.equalTo(self.view);
}

8. UITableview 全局刷新跳动

self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;

8. 半透明Modal控制器解决方案

方法一

self.view.backgroundColor = [UIColor clearColor];
    self.providesPresentationContextTransitionStyle = YES;
    self.definesPresentationContext = YES;
    self.modalPresentationStyle = UIModalPresentationOverCurrentContext;

方法二(基于方法一,解决tabbar跟控制器Modal)

UIViewController *VC = [[UIViewController alloc] init];
    VC.userDetailModel = self.userDetailModel;
    [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:VC animated:NO completion:nil];

9. UICollectionViewCell自适应大小

//该方法会出现丢cell的BUG
//layout.estimatedItemSize = CGSizeMake(20, 28);
-(UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes{
    UICollectionViewLayoutAttributes *attributes = [super preferredLayoutAttributesFittingAttributes:layoutAttributes];
    CGRect frame = [self.textButton.titleLabel.text boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 15) options:(NSStringDrawingUsesLineFragmentOrigin) attributes:[NSDictionary dictionaryWithObjectsAndKeys:kHCFont_26,NSFontAttributeName, nil] context:nil];
    frame.size.width = frame.size.width + 20;
    frame.size.height = 28;
    attributes.frame = frame;
    return attributes;
}
//设置每个Cell 的宽高(简单地替换方法)
//layout.itemSize = CGSizeMake(10, 28);
- (CGSize)collectionView:(UICollectionView *)collectionView  layout:(nonnull UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(nonnull NSIndexPath *)indexPath{
     RJModel *model = self.modelArray[indexPath.row];
        CGRect frame = [model.name boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 15) options:(NSStringDrawingUsesLineFragmentOrigin) attributes:[NSDictionary dictionaryWithObjectsAndKeys:kHCFont_26,NSFontAttributeName, nil] context:nil];
        return CGSizeMake(frame.size.width+20, 28);
}

10. UITabBarController配置相关

//TabBarItem添加动画
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
    NSInteger index = [self.tabBar.items indexOfObject:item];
    if (index != self.indexFlag) {
        //执行动画
        NSMutableArray *arry = [NSMutableArray array];
        for (UIView *btn in self.tabBar.subviews) {
            if ([btn isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
                [arry addObject:btn]; }}
        //添加动画
        [[arry[index] layer] addAnimation:[RJCoreTool rj_randomTransform] forKey:nil];
        //移除其他tabbar的动画
        for (int i = 0; i<arry.count; i++) {
            if (i != index) {
                [[arry[i] layer] removeAllAnimations];}}
        self.indexFlag = index;
    }
}
    //整体颜色渲染
    self.tabBar.tintColor = [UIColor blueColor];
    [[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:11]} forState:UIControlStateNormal];
    //未选中字体颜色
    [[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor randomColor],NSFontAttributeName:[UIFont systemFontOfSize:11]} forState:UIControlStateNormal];
    //选中字体颜色
    [[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor randomColor],NSFontAttributeName:[UIFont systemFontOfSize:11]} forState:UIControlStateSelected];

    self.tabBar.backgroundColor = [UIColor whiteColor];//不设置为半透明
    self.tabBar.backgroundImage = [UIImage imageNamed:@"Beautimage14"];

11. UINavigationController配置相关

#import "RJNavigationViewController.h"
@interface RJNavigationViewController ()<UIGestureRecognizerDelegate>

@end

@implementation RJNavigationViewController
-(void)viewDidLoad{
    [super viewDidLoad];
    // 添加全屏返回手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];
    [self.view addGestureRecognizer:pan];
    // 不允许边缘手势触发
    self.interactivePopGestureRecognizer.enabled = NO;
    // 实现滑动返回功能
    pan.delegate = self;
}
#pragma mark - UIGestureRecognizerDelegate
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    return self.childViewControllers.count != 1;
}

+(void)load{
    // 修改当前导航控制器下导航条
    
    // 1 appearanceWhenContainedIn:获取某个类下面全局外观,获取RJNavigationViewController所有导航条
    UINavigationBar *bar = [UINavigationBar appearanceWhenContainedIn:self, nil];
    // 2 设置导航条标题 变大变宽 => 导航条
    bar.titleTextAttributes = @{NSFontAttributeName:[UIFont boldSystemFontOfSize:18]};
    // 3 设置导航条背景图片:一定要使用Default
    [bar setBackgroundImage:[UIImage imageNamed:@"beaut_1"] forBarMetrics:UIBarMetricsDefault];
    [bar setShadowImage:[UIImage new]];
}
// 设置非根控制器返回按钮
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
    if (self.childViewControllers.count) {//非根控制器
        // 1 创建返回按钮
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.layer.cornerRadius = 10;
        button.layer.borderColor = WHITE.CGColor;
        button.layer.borderWidth = 1;
        [button setTitle:@"←  ⚔" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
        // 2 把按钮往左边挪动
        [button sizeToFit];
        button.contentEdgeInsets = UIEdgeInsetsMake(0, -28, 0, 0);
        // 3 覆盖系统返回按钮
        viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
        viewController.hidesBottomBarWhenPushed = YES;
    }
    // 4 注意。一定要记得调用super
    [super pushViewController:viewController animated:animated];
}
-(void)back{
    [self popViewControllerAnimated:YES];
}
@end

12. iOS富文本字符串AttributedString详解

13. UILabel宽度固定, 字体大小自适应

    //方法一
    self.yueL.adjustsFontSizeToFitWidth = YES;

    //方法二 : NS_DEPRECATED_IOS(2_0, 7_0)
    CGFloat fontSize;
    [self.yueL.text sizeWithFont:[UIFont systemFontOfSize:20]
                     minFontSize:10.0
                  actualFontSize:&fontSize
                        forWidth:200
                   lineBreakMode:NSLineBreakByWordWrapping];
    self.yueL.font = [UIFont systemFontOfSize:fontSize];

14. 计算文字高度

    //NS_DEPRECATED_IOS(2_0, 7_0)
    [string sizeWithFont:[UIFont systemFontOfSize:12]
          constrainedToSize:CGSizeMake(200, CGFLOAT_MAX)
              lineBreakMode:NSLineBreakByWordWrapping];

    //NS_AVAILABLE(10_11, 7_0)
    [string boundingRectWithSize:CGSizeMake(labelWidth, MAXFLOAT)
                         options:NSStringDrawingUsesLineFragmentOrigin
                      attributes:@{NSFontAttributeName:font}
                         context:nil]

15. NSString 和 NSArray相互转化

   //将array数组转换为string字符串
    NSString *tempString = [array componentsJoinedByString:@","];
    //将string字符串转换为array数组
    NSArray  *tempArray  = [string componentsSeparatedByString:@","];

16. tableView顶端图片放大效果

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat offsetY = scrollView.contentOffset.y;
    NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));
    if (offsetY <= 0) {
        self.headerView.frame = CGRectMake(offsetY / 2.0, offsetY, kScreenWidth - offsetY, 266 - offsetY);
    }
}
- (UIView *)headerView {
    if(!_headerView) {
        _headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 266)];
        self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 266)];
        [self.tableView addSubview:_headerView];
    }
    return _headerView;
}

17 Mac10.13 Pod报错 / Xcode 9.4 更新报错

1、 Xcode 9.4 更新报错

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

解决:$ xcode-select --install

2、 Mac10.13 Pod报错

: /usr/local/bin/pod: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby: bad interpreter: No such file or directory

解决:
$ brew link --overwrite cocoapods

Error: No such keg: /usr/local/Cellar/cocoapods

$ brew reinstall cocoapods

Error: No such keg: /usr/local/Cellar/cocoapods
jiegegedexiaolingtong:HobayNew yishangyun$ brew reinstall cocoapods
==> Reinstalling cocoapods 
==> Downloading https://homebrew.bintray.com/bottles/cocoapods-1.4.0.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring cocoapods-1.4.0.high_sierra.bottle.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/pod
Target /usr/local/bin/pod
already exists. You may want to remove it:
  rm '/usr/local/bin/pod'

To force the link and overwrite all conflicting files:
  brew link --overwrite cocoapods

To list all files that would be deleted:
  brew link --overwrite --dry-run cocoapods

Possible conflicting files are:
/usr/local/bin/pod
/usr/local/bin/xcodeproj
==> Summary
🍺  /usr/local/Cellar/cocoapods/1.4.0: 8,818 files, 13.0MB

//$ brew install ruby可省略该命令
$ brew link --overwrite cocoapods

Linking /usr/local/Cellar/cocoapods/1.4.0... 2 symlinks created

18 四舍五入保留两位小数

-(float)roundFloat:(float)price{
    CGFloat myF = floor(price*10000)/10000;
    return (floorf(myF*100 + 0.5))/100;
}

19 启动界面隐藏状态栏

General设置
info.plist

20 设备静音模式下设置播放音

 [AVAudioSession sharedInstance]
/* set session category */
- (BOOL)setCategory:(AVAudioSessionCategory)category error:(NSError **)outError API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);
#pragma mark -- Values for the category property --

/*  Use this category for background sounds such as rain, car engine noise, etc.  
 Mixes with other music. */
extern AVAudioSessionCategory const AVAudioSessionCategoryAmbient API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);

/*  Use this category for background sounds.  Other music will stop playing. */
extern AVAudioSessionCategory const AVAudioSessionCategorySoloAmbient API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);

/* Use this category for music tracks.*/
extern AVAudioSessionCategory const AVAudioSessionCategoryPlayback API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);

/*  Use this category when recording audio. */
extern AVAudioSessionCategory const AVAudioSessionCategoryRecord API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);

/*  Use this category when recording and playing back audio. */
extern AVAudioSessionCategory const AVAudioSessionCategoryPlayAndRecord API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);

/*  Use this category when using a hardware codec or signal processor while
 not playing or recording audio. */
extern AVAudioSessionCategory const AVAudioSessionCategoryAudioProcessing API_DEPRECATED("No longer supported", ios(3.0, 10.0)) API_UNAVAILABLE(watchos, tvos) API_UNAVAILABLE(macos);

/*  Use this category to customize the usage of available audio accessories and built-in audio hardware.
 For example, this category provides an application with the ability to use an available USB output 
 and headphone output simultaneously for separate, distinct streams of audio data. Use of 
 this category by an application requires a more detailed knowledge of, and interaction with, 
 the capabilities of the available audio routes.  May be used for input, output, or both.
 Note that not all output types and output combinations are eligible for multi-route.  Input is limited
 to the last-in input port. Eligible inputs consist of the following:
    AVAudioSessionPortUSBAudio, AVAudioSessionPortHeadsetMic, and AVAudioSessionPortBuiltInMic.  
 Eligible outputs consist of the following: 
    AVAudioSessionPortUSBAudio, AVAudioSessionPortLineOut, AVAudioSessionPortHeadphones, AVAudioSessionPortHDMI, 
    and AVAudioSessionPortBuiltInSpeaker.  
 Note that AVAudioSessionPortBuiltInSpeaker is only allowed to be used when there are no other eligible 
 outputs connected.  */
extern AVAudioSessionCategory const AVAudioSessionCategoryMultiRoute API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);

21-bash: /usr/local/bin/pod: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: bad interpreter: No such file or directory

上述问题是本人升级了Mac的系统导致的,
当你的Mac系统升级为 high sierra 的时候,
别忘记更新cocoapods。执行命令为:
$ sudo gem update --system
$ sudo gem install cocoapods -n/usr/local/bin
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容