Masonry给ScrollView添加约束/UIImageView四周加阴影/属性字符串加点击事件/图片灰度化/匹配重复子串

//
//  ScrollViewController.m
//  展开合起
//
//  Created by 李洞洞 on 2019/4/8.
//  Copyright © 2019年 李洞洞. All rights reserved.
//

#import "ScrollViewController.h"
#import "Masonry.h"
@interface ScrollViewController ()
@property(nonatomic,strong)UIScrollView * scrollView;
@end

@implementation ScrollViewController
- (UIScrollView *)scrollView
{
    if (!_scrollView) {
        _scrollView = [[UIScrollView alloc]init];
        _scrollView.backgroundColor = [UIColor cyanColor];
        if (@available(iOS 11.0, *)) {
            _scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        }else {
            self.automaticallyAdjustsScrollViewInsets = NO;
        }
    }
    return _scrollView;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:self.scrollView];
    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.and.right.and.top.and.bottom.mas_equalTo(self.view);
    }];
#pragma mark --- 子1
    UIView * view = ({
        UIView * view  = [[UIView alloc]init];
        view.backgroundColor = [UIColor purpleColor];
        view;
    });
    [self.scrollView addSubview:view];
    [view mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.and.right.mas_equalTo(self.scrollView).mas_offset(0);
        make.top.mas_equalTo(self.scrollView.mas_top).mas_offset(10);
        make.height.mas_equalTo(250);
        make.width.mas_equalTo(self.scrollView.mas_width);
    }];
#pragma mark --- 子2
    UIView * two = ({
        UIView * view = [[UIView alloc]init];
        view.backgroundColor = [UIColor orangeColor];
        view;
    });
    [self.scrollView addSubview:two];
    [two mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.and.right.mas_equalTo(self.scrollView).mas_offset(0);
        make.top.mas_equalTo(view.mas_bottom).mas_offset(10);
        make.height.mas_equalTo(350);
        make.width.mas_equalTo(self.scrollView.mas_width);
    }];
#pragma mark --- 子3
    UIView * three = ({
        UIView * view = [[UIView alloc]init];
        view.backgroundColor = [UIColor redColor];
        view;
    });
    [self.scrollView addSubview:three];
    [three mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.and.right.mas_equalTo(self.scrollView).mas_offset(0);
        make.top.mas_equalTo(two.mas_bottom).mas_offset(10);
        make.height.mas_equalTo(350);
        make.width.mas_equalTo(self.scrollView.mas_width);
    }];
    [self.view layoutIfNeeded];
    self.scrollView.contentSize = CGSizeMake(CGRectGetWidth(self.view.frame), CGRectGetMaxY(three.frame) + 10);

}

@end

E77157CA4119979301B856970CD9DD01.png

ImageView四周加阴影效果

Simulator Screen Shot - iPhone 7 - 2019-10-18 at 13.45.45.png
UIImageView * middleCenterShaowBgImv = ({
        UIImageView * imv = [[UIImageView alloc]init];
        imv.image = [UIImage imageNamed:@"Information1-card"];
        CALayer * layer = [imv layer];
        layer.borderColor = [[UIColor clearColor] CGColor];
        layer.borderWidth = 5.0f;
        imv.layer.shadowColor = [UIColor grayColor].CGColor;
        imv.layer.shadowOffset = CGSizeMake(0, 0);
        imv.layer.shadowOpacity = 0.3;
        imv.layer.shadowRadius = 10.0;
        imv.backgroundColor = UIColor.whiteColor
        imv;
    });
    [middleView addSubview:middleCenterShaowBgImv];
    [middleCenterShaowBgImv mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_offset(24);
        make.top.mas_offset(22);
        make.right.mas_offset(-24);
        make.bottom.mas_offset(-27);
    }];

UIView局部角切圆角

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                                   byRoundingCorners:UIRectCornerTopRight | UIRectCornerTopLeft cornerRadii:CGSizeMake(20, 20)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.bounds;
maskLayer.path = maskPath.CGPath; 
self.layer.mask = maskLayer;

属性字符串加点击事件

    // 测试文本
    NSString *text = @"感谢您选择敏特研学院App!\n我们非常重视您的个人信息和隐私保护,为了更好的保障您的个人权益,在您使用我们的产品前,请您务必审慎阅读《用户协议和隐私政策》内的所有条款,尤其是:\n1. 我们对您的个人信息的收集/保存/使用以及您的用户权利等条款;\n2.约定我们的限制责任,免责条款.\n\n您点击\"同意\"的行为即表示您已阅读完毕并同意以上协议的全部内容.";

    // 转成可变属性字符串
    NSMutableAttributedString * mAttributedString = [NSMutableAttributedString new];

    // 调整行间距段落间距
    NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
        [paragraphStyle setLineSpacing:2];
        [paragraphStyle setParagraphSpacing:4];

    // 设置文本属性
    NSDictionary *attri = [NSDictionary dictionaryWithObjects:@[[UIFont systemFontOfSize:16], [UIColor blackColor], paragraphStyle] forKeys:@[NSFontAttributeName, NSForegroundColorAttributeName, NSParagraphStyleAttributeName]];
        [mAttributedString appendAttributedString:[[NSAttributedString alloc] initWithString:text attributes:attri]];

    // 匹配条件
    NSString *regulaStr = @"《用户协议和隐私政策》";

    NSError *err = NULL;
    // 根据匹配条件,创建了一个正则表达式
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regulaStr
                                                                               options:NSRegularExpressionCaseInsensitive
                                                                                 error:&err];
        if (!regex) {
            NSLog(@"正则创建失败error!= %@", [err localizedDescription]);
        } else {
            NSArray *allMatches = [regex matchesInString:mAttributedString.string options:NSMatchingReportCompletion range:NSMakeRange(0, mAttributedString.string.length)];
            for (NSTextCheckingResult *match in allMatches) {
                NSString *substrinsgForMatch2 = [mAttributedString.string substringWithRange:match.range];
                NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString:substrinsgForMatch2];
                // 利用YYText设置一些文本属性
                one.yy_font = [UIFont systemFontOfSize:16];
                one.yy_underlineStyle = NSUnderlineStyleSingle;
                one.yy_color = [UIColor colorWithRed:0.093 green:0.492 blue:1.000 alpha:1.000];
                
                YYTextBorder *border = [YYTextBorder new];
                border.cornerRadius = 3;
                border.insets = UIEdgeInsetsMake(-2, -1, -2, -1);
                border.fillColor = [UIColor colorWithWhite:0.000 alpha:0.220];
                
                YYTextHighlight *highlight = [YYTextHighlight new];
                [highlight setBorder:border];
                [one yy_setTextHighlight:highlight range:one.yy_rangeOfAll];
                // 根据range替换字符串
                [mAttributedString replaceCharactersInRange:match.range withAttributedString:one];
            }
        }

        // 使用YYLabel显示
        YYLabel *label = [YYLabel new];
        label.userInteractionEnabled = YES;
        label.numberOfLines = 0;
        label.textVerticalAlignment = YYTextVerticalAlignmentTop;
//        label.size = CGSizeMake(260, 260);
//        label.center = CGPointMake(self.view.width / 2, 200);
        label.attributedText = mAttributedString;
//        [self.view addSubview:label];
        label.highlightTapAction = ^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect) {
            NSString *string = [NSString stringWithFormat:@"Tap: %@",[text.string substringWithRange:range]];
            NSLog(@"%@", string);
            if (self.confimBlock) {
                self.confimBlock(self);
            }
        };

    // 利用YYTextLayout计算高度
    YYTextContainer *container = [YYTextContainer containerWithSize:CGSizeMake(SCREEN_WIDTH - 60, MAXFLOAT)];
    YYTextLayout *textLayout = [YYTextLayout layoutWithContainer:container text: mAttributedString];
//    label.height = textLayout.textBoundingSize.height;
    [self.alertV addSubview:label];
//    label.backgroundColor = UIColor.cyanColor;
    
    [label mas_makeConstraints:^(MASConstraintMaker *make) {
        make.height.mas_equalTo(textLayout.textBoundingSize.height);
        make.left.mas_offset(15);
        make.right.mas_offset(-15);
        make.top.mas_equalTo(self.mainTitleLabel.mas_bottom).mas_offset(25);
    }];

属性字符串拼接图片

NSMutableAttributedString * attr = [[NSMutableAttributedString alloc]initWithString:unFinishCount attributes:@{NSForegroundColorAttributeName: UIColor.whiteColor,NSFontAttributeName : [UIFont systemFontOfSize:10]}];
NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
textAttachment.image = [UIImage imageNamed: @"关闭按钮"];
textAttachment.bounds = CGRectMake(0, -1, 10, 10);
NSAttributedString * attachAttr = [NSAttributedString attributedStringWithAttachment:textAttachment];
[attr appendAttributedString:attachAttr];
self.unLabel.textAlignment = NSTextAlignmentCenter;
self.unLabel.attributedText = attr;

给一组cell加阴影

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    // 圆角角度
    CGFloat radius = 10.f;
    // 设置cell 背景色为透明
    cell.backgroundColor = UIColor.clearColor;
    // 创建两个layer
    CAShapeLayer *normalLayer = [[CAShapeLayer alloc] init];
    CAShapeLayer *selectLayer = [[CAShapeLayer alloc] init];
    // 获取显示区域大小
    CGRect bounds = CGRectInset(cell.bounds, SCREEN_WIDTH / 375 * 20, 0);
    // cell的backgroundView
    UIView *normalBgView = [[UIView alloc] initWithFrame:bounds];
    // 获取每组行数
    NSInteger rowNum = [tableView numberOfRowsInSection:indexPath.section];
    // 贝塞尔曲线
    UIBezierPath *bezierPath = nil;
    
    if (rowNum == 1) {
        // 一组只有一行(四个角全部为圆角)
        bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(radius, radius)];
        normalBgView.clipsToBounds = NO;
    }else {
        normalBgView.clipsToBounds = YES;
        if (indexPath.row == 0) {
            normalBgView.frame = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(-5, 0, 0, 0));
            CGRect rect = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(5, 0, 0, 0));
            // 每组第一行(添加左上和右上的圆角)
            bezierPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(radius, radius)];
        }else if (indexPath.row == rowNum - 1) {
            normalBgView.frame = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(0, 0, -5, 0));
            CGRect rect = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(0, 0, 5, 0));
            // 每组最后一行(添加左下和右下的圆角)
            bezierPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight) cornerRadii:CGSizeMake(radius, radius)];
        }else {
            // 每组不是首位的行不设置圆角
            bezierPath = [UIBezierPath bezierPathWithRect:bounds];
        }
    }
    
    // 阴影
    normalLayer.shadowColor = [UIColor blackColor].CGColor;
    normalLayer.shadowOpacity = 0.2;
    normalLayer.shadowOffset = CGSizeMake(0, 0);
    normalLayer.path = bezierPath.CGPath;
    normalLayer.shadowPath = bezierPath.CGPath;
    
    // 把已经绘制好的贝塞尔曲线路径赋值给图层,然后图层根据path进行图像渲染render
    normalLayer.path = bezierPath.CGPath;
    selectLayer.path = bezierPath.CGPath;
    
    // 设置填充颜色
    normalLayer.fillColor = [UIColor whiteColor].CGColor;
    // 添加图层到nomarBgView中
    [normalBgView.layer insertSublayer:normalLayer atIndex:0];
    normalBgView.backgroundColor = UIColor.clearColor;
    cell.backgroundView = normalBgView;
    
    // 替换cell点击效果
    UIView *selectBgView = [[UIView alloc] initWithFrame:bounds];
    selectLayer.fillColor = [UIColor colorWithWhite:0.95 alpha:1.0].CGColor;
    [selectBgView.layer insertSublayer:selectLayer atIndex:0];
    selectBgView.backgroundColor = UIColor.clearColor;
    cell.selectedBackgroundView = selectBgView;
}

让TableViewCell既有圆角又有阴影

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        [self.contentView addSubview:self.titleL];
        [self.contentView addSubview:self.tableView];
        self.selectionStyle = UITableViewCellSelectionStyleNone;
#if 1
        self.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
        self.contentView.layer.cornerRadius = 6;
        self.contentView.backgroundColor = UIColor.whiteColor;
        self.contentView.layer.shadowColor = [UIColor grayColor].CGColor;
        self.contentView.layer.shadowOffset = CGSizeMake(0, 0);
        self.contentView.layer.shadowOpacity = 0.3;
        self.contentView.layer.shadowRadius = 10.0;
#endif
    }
    return self;
}

播放Gif的正确姿势

import <ImageIO/ImageIO.h>

- (void)viewDidLoad {
    [super viewDidLoad];
    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://bigfish-img-test.oss-cn-hangzhou.aliyuncs.com/media/res/confres/course/image/contentpic/exercise/test/right_l.gif"]];
    CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
    size_t count = CGImageSourceGetCount(source);
    UIImage *animatedImage;
    NSMutableArray * imageArr = [NSMutableArray array];
    NSTimeInterval duration = 0.0f;
    if (count <= 1) {
        animatedImage = [[UIImage alloc] initWithData:data];
    }
    else {
        for (size_t i = 0; i < count; i++) {
            CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
            [imageArr addObject:[UIImage imageWithCGImage:image]];
            duration += [self sd_frameDurationAtIndex:i source:source];
            CGImageRelease(image);
        }
        if (!duration) {
            duration = (1.0f / 10.0f) * count;
        }
        NSLog(@"%f --- %@",duration,imageArr);
    }
    CFRelease(source);
    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 310, 280)];
    [self.view addSubview:imageView];
    imageView.animationImages = imageArr;
    imageView.animationDuration = duration;
    imageView.animationRepeatCount = 1;
    [imageView startAnimating];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        imageView.hidden = YES;
    });
}
- (float)sd_frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source {
    float frameDuration = 0.1f;
    CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil);
    NSDictionary *frameProperties = (__bridge NSDictionary *)cfFrameProperties;
    NSDictionary *gifProperties = frameProperties[(NSString *)kCGImagePropertyGIFDictionary];
    NSNumber *delayTimeUnclampedProp = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime];
    if (delayTimeUnclampedProp) {
        frameDuration = [delayTimeUnclampedProp floatValue];
    }
    else {
        NSNumber *delayTimeProp = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime];
        if (delayTimeProp) {
            frameDuration = [delayTimeProp floatValue];
        }
    }
    if (frameDuration < 0.011f) {
        frameDuration = 0.100f;
    }
    CFRelease(cfFrameProperties);
    return frameDuration;
}

判断ScrollView CollectionView的滑动方向

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint scrollVelocity = [scrollView.panGestureRecognizer  translationInView:self.view];
    if (scrollVelocity.x < 0) {
        if (self.ldIndex == self.models.count) {
            LDLog(@"最后一页 再往后滑事件....");
            self.first = YES;
        }
    }else{
        self.first = NO;
    }
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    self.index = scrollView.contentOffset.x / SCREEN_WIDTH;
    self.ldIndex = self.index + 1;
    if (self.first) {
        [[NSNotificationCenter defaultCenter] postNotificationName:ExerciseQsSectionEndNotifcation object:nil userInfo:nil];
      }
}

UICollectionView滑动时有间隔

DCB4420A38C41EF7A815990269152C7E.png
- (UICollectionView *)collection
{
    if (!_collection) {
        _collection = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, UIScreen.mainScreen.bounds.size.height) collectionViewLayout:[[LDFlowLayout alloc]init]];
        _collection.dataSource = self;
        [_collection registerClass:[LDDCollectionViewCell class] forCellWithReuseIdentifier:@"LDD"];
    }
    return _collection;
}

@implementation LDFlowLayout

- (void)prepareLayout
{
    [super prepareLayout];
    self.minimumLineSpacing = 0;
    self.minimumInteritemSpacing = 0;
    self.collectionView.pagingEnabled = YES;
    self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    self.itemSize = CGSizeMake(self.collectionView.bounds.size.width, self.collectionView.bounds.size.height);
    self.collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
@end
- (void)loadView
{
    [super loadView];
    CGRect rect = self.view.frame;
    rect.size.width += 20;
    self.view.frame = rect;
}
@implementation LDDCollectionViewCell
- (UIView *)ld_contentView
{
    if (!_ld_contentView) {
        _ld_contentView = [[UIView alloc]init];
    }
    return _ld_contentView;
}
- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        [self.contentView addSubview:self.ld_contentView];
    }
    return self;
}
- (void)layoutSubviews
{
    [super layoutSubviews];
    self.ld_contentView.frame = CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, UIScreen.mainScreen.bounds.size.height);
}
@end

图片灰度化处理

-(UIImage*)getGrayImage:(UIImage*)sourceImage
{
    int width = sourceImage.size.width*sourceImage.scale;
    int height = sourceImage.size.height*sourceImage.scale;
    
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
    
    CGContextRef context = CGBitmapContextCreate (nil,width,height,8,0,colorSpace,kCGBitmapByteOrderDefault);
    CGColorSpaceRelease(colorSpace);
    
    if (context == NULL) {
        return nil;
    }
    
    CGContextDrawImage(context,CGRectMake(0, 0, width, height), sourceImage.CGImage);
    CGImageRef cgImage=CGBitmapContextCreateImage(context);
    UIImage *grayImage = [UIImage imageWithCGImage:cgImage];
    CGImageRelease(cgImage);
    
    CGContextRelease(context);
    
    return grayImage;
    
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = UIColor.whiteColor;
    UIImageView * imv = ({
        UIImageView * image = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
        image.image = [UIImage imageNamed:@"999.jpg"];
        image;
    });
    [self.view addSubview:imv];
    
    UIImageView * imv1 = ({
        UIImageView * image = [[UIImageView alloc]initWithFrame:CGRectMake(100, 220, 100, 100)];
        image.image = [self getGrayImage:[UIImage imageNamed:@"999.jpg"]];
        image;
    });
    [self.view addSubview:imv1];
}
3A8FE022-E20A-4D2E-833A-02D7CC906281.png

递归 巧妙匹配重复子串

NSString *baseStr = @"...我是....是,,,,,...我是,,.是,,..我是...不...是,,,,.我...,,我是..";
NSString *aimStr = @"我是";
NSMutableArray *result = [NSMutableArray array];
result =  [self findAimstrAllRangeWithBaseStr:baseStr andAimStr:aimStr andBaseRange:NSMakeRange(0, baseStr.length) resultArr:result];
NSLog(@"%@",result);



-(NSMutableArray *)findAimstrAllRangeWithBaseStr:(NSString *)baseStr andAimStr:(NSString*)aimStr andBaseRange:(NSRange)baseRange resultArr:(NSMutableArray *)resultArr
{
    // 区分大小写比较
    NSRange range = [baseStr rangeOfString:aimStr options:NSLiteralSearch range:baseRange];
    
    if (range.length > 0) {
        [resultArr addObject:NSStringFromRange(range)];
        NSUInteger nextLocation = range.location + range.length;
        NSRange rangeNew = NSMakeRange(nextLocation, baseStr.length - nextLocation);
        [self findAimstrAllRangeWithBaseStr:baseStr andAimStr:aimStr andBaseRange:rangeNew resultArr:resultArr];
    }
    return resultArr;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容