ios 各种多样的UIlabel

今天分享自己掌握的几种UIlabel ,大家有更多的label请分享给我哟


1:内边距,自适应的label ,这个label主要是用于内边距同时要Masonry进行适配的时候使用

InsetLabel.h

@interfaceInsetLabel :UILabel

//用于设置Label的内边距

@property(nonatomic)UIEdgeInsetsneiinsets;

//初始化方法一

-(id) initWithFrame:(CGRect)frame andInsets: (UIEdgeInsets) neiinsets;

//初始化方法二

-(id) initWithInsets: (UIEdgeInsets) neiinsets;

@end


InsetLabel.m

#import"InsetLabel.h"

@implementationInsetLabel

//初始化方法一

-(id) initWithFrame:(CGRect)frame andInsets:(UIEdgeInsets)neiinsets {

self= [superinitWithFrame:frame];

if(self){

self.neiinsets= neiinsets;

}

returnself;

}

//初始化方法二

-(id) initWithInsets:(UIEdgeInsets)neiinsets {

self= [superinit];

if(self){

self.neiinsets= neiinsets;

}

returnself;

}

//重载drawTextInRect方法

-(void) drawTextInRect:(CGRect)rect {

return[superdrawTextInRect:UIEdgeInsetsInsetRect(rect,self.neiinsets)];

}

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {

UIEdgeInsetsinsets =self.neiinsets;

CGRectrect = [supertextRectForBounds:UIEdgeInsetsInsetRect(bounds, insets)

limitedToNumberOfLines:numberOfLines];

rect.origin.x-= insets.left;

rect.origin.y-= insets.top;

rect.size.width+= (insets.left+ insets.right);

rect.size.height+= (insets.top+ insets.bottom);

returnrect;

}

@end


2:描边的label  ,以及虚线label

WJFOutlineLabel.h

@interfaceWJFOutlineLabel : UILabel

/**描多粗的边*/

@property(nonatomic,assign) NSInteger outLineWidth;

/**外轮颜色*/

@property(nonatomic,strong) UIColor *outLinetextColor;

/**里面字体默认颜色*/

@property(nonatomic,strong) UIColor *labelTextColor;

@end


WJFOutlineLabel.m

#import"WJFOutlineLabel.h"

@implementationWJFOutlineLabel

- (void)drawTextInRect:(CGRect)rect {

CGSize shadowOffset =self.shadowOffset;

UIColor *textColor =self.textColor;

CGContextRef c = UIGraphicsGetCurrentContext();

CGContextSetLineWidth(c,self.outLineWidth);

CGContextSetLineJoin(c, kCGLineJoinRound);

CGContextSetTextDrawingMode(c, kCGTextStroke);

self.textColor =self.outLinetextColor;

[superdrawTextInRect:rect];

self.textColor = textColor;

CGContextSetTextDrawingMode(c, kCGTextFill);

[superdrawTextInRect:rect];

self.shadowOffset = shadowOffset;

}

//虚线的label

-(void)dottedLineWithView:(UIView*)dottedView{

CAShapeLayer*border = [CAShapeLayerlayer];

border.strokeColor= [UIColorredColor].CGColor;

border.fillColor=nil;

border.path= [UIBezierPathbezierPathWithRect:dottedView.bounds].CGPath;

border.frame= dottedView.bounds;

border.lineWidth=1.f;

border.lineCap=@"square";

border.lineDashPattern=@[@4,@2];

[dottedView.layeraddSublayer:border];

}

@end


3:辉光效果的Label

WJFlowLabel.h

@interfaceWJFlowLabel :UILabel

/**

*Glow size, default is 0.f.

*/

@property(nonatomic)CGFloatglowSize;

/**

*Glow color, default is clear color.

*/

@property(nonatomic,strong)UIColor*glowColor;

/**

*Inner glow size, default is 0.f.

*/

@property(nonatomic)CGFloatinnerGlowSize;

/**

*Inner glow color, default is clear color.

*/

@property(nonatomic,strong)UIColor*innerGlowColor;

@end

WJFlowLabel.m

#import"WJFlowLabel.h"

@implementationWJFlowLabel

- (id)initWithFrame:(CGRect)frame {

if(self= [superinitWithFrame:frame]) {

[selfsetup];

}

returnself;

}

- (id)initWithCoder:(NSCoder*)coder {

if(self= [superinitWithCoder:coder]) {

[selfsetup];

}

returnself;

}

- (void)setup {

self.glowSize=0.0f;

self.glowColor= [UIColorclearColor];

self.innerGlowSize=0.0f;

self.innerGlowColor= [UIColorclearColor];

}

- (void)drawTextInRectForIOS7:(CGRect)rect {

CGContextRefctx =UIGraphicsGetCurrentContext();

UIGraphicsBeginImageContextWithOptions(rect.size,NO,0.0);

[superdrawTextInRect:rect];

UIImage*textImage =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

CGContextSaveGState(ctx);

if(_glowSize>0) {

CGContextSetShadow(ctx,CGSizeZero,_glowSize);

CGContextSetShadowWithColor(ctx,CGSizeZero,_glowSize,_glowColor.CGColor);

}

[textImagedrawAtPoint:rect.origin];

CGContextRestoreGState(ctx);

if(_innerGlowSize>0) {

UIGraphicsBeginImageContextWithOptions(rect.size,NO,0.0);

CGContextRefctx2 =UIGraphicsGetCurrentContext();

CGContextSaveGState(ctx2);

CGContextSetFillColorWithColor(ctx2, [UIColorblackColor].CGColor);

CGContextFillRect(ctx2, rect);

CGContextTranslateCTM(ctx2,0.0, rect.size.height);

CGContextScaleCTM(ctx2,1.0, -1.0);

CGContextClipToMask(ctx2, rect, textImage.CGImage);

CGContextClearRect(ctx2, rect);

CGContextRestoreGState(ctx2);

UIImage*inverted =UIGraphicsGetImageFromCurrentImageContext();

CGContextClearRect(ctx2, rect);

CGContextSaveGState(ctx2);

CGContextSetFillColorWithColor(ctx2,_innerGlowColor.CGColor);

CGContextSetShadowWithColor(ctx2,CGSizeZero,_innerGlowSize,_innerGlowColor.CGColor);

[inverteddrawAtPoint:CGPointZero];

CGContextTranslateCTM(ctx2,0.0, rect.size.height);

CGContextScaleCTM(ctx2,1.0, -1.0);

CGContextClipToMask(ctx2, rect, inverted.CGImage);

CGContextClearRect(ctx2, rect);

CGContextRestoreGState(ctx2);

UIImage*innerShadow =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

[innerShadowdrawAtPoint:rect.origin];

}

}

- (void)drawTextInRectForIOS6:(CGRect)rect {

CGContextRefctx =UIGraphicsGetCurrentContext();

CGContextSaveGState(ctx);

if(self.glowSize>0) {

CGContextSetShadow(ctx,CGSizeZero,_glowSize);

CGContextSetShadowWithColor(ctx,CGSizeZero,_glowSize,_glowColor.CGColor);

}

[superdrawTextInRect:rect];

CGContextRestoreGState(ctx);

if(_innerGlowSize>0) {

UIGraphicsBeginImageContextWithOptions(rect.size,NO,0.0);

CGContextRefctx2 =UIGraphicsGetCurrentContext();

[superdrawTextInRect:rect];

UIImage*textImage =UIGraphicsGetImageFromCurrentImageContext();

CGContextClearRect(ctx2, rect);

CGContextSaveGState(ctx2);

CGContextSetFillColorWithColor(ctx2, [UIColorblackColor].CGColor);

CGContextFillRect(ctx2, rect);

CGContextTranslateCTM(ctx2,0.0, rect.size.height);

CGContextScaleCTM(ctx2,1.0, -1.0);

CGContextClipToMask(ctx2, rect, textImage.CGImage);

CGContextClearRect(ctx2, rect);

CGContextRestoreGState(ctx2);

UIImage*inverted =UIGraphicsGetImageFromCurrentImageContext();

CGContextClearRect(ctx2, rect);

CGContextSaveGState(ctx2);

CGContextSetFillColorWithColor(ctx2,_innerGlowColor.CGColor);

CGContextSetShadowWithColor(ctx2,CGSizeZero,_innerGlowSize,_innerGlowColor.CGColor);

[inverteddrawAtPoint:CGPointZero];

CGContextTranslateCTM(ctx2,0.0, rect.size.height);

CGContextScaleCTM(ctx2,1.0, -1.0);

CGContextClipToMask(ctx2, rect, inverted.CGImage);

CGContextClearRect(ctx2, rect);

CGContextRestoreGState(ctx2);

UIImage*innerShadow =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

[innerShadowdrawAtPoint:rect.origin];

}

}

- (void)drawTextInRect:(CGRect)rect {

if(self.text==nil||self.text.length==0) {

return;

}

if([[[UIDevicecurrentDevice]systemVersion]compare:@"7.0"options:NSNumericSearch] !=NSOrderedAscending) {

[selfdrawTextInRectForIOS7:rect];

}else{

[selfdrawTextInRectForIOS6:rect];

}

}

@end


4:广告UIlabel

BBCyclingLabel.h

#pragma mark - Enums

typedefenum

{

// User must provide pre-transition and transition blocks

BBCyclingLabelTransitionEffectCustom =0,

BBCyclingLabelTransitionEffectFadeIn=1<<0,

BBCyclingLabelTransitionEffectFadeOut=1<<1,

BBCyclingLabelTransitionEffectCrossFade =BBCyclingLabelTransitionEffectFadeIn|

BBCyclingLabelTransitionEffectFadeOut,

BBCyclingLabelTransitionEffectZoomIn=1<<2,

BBCyclingLabelTransitionEffectZoomOut =1<<3,

BBCyclingLabelTransitionEffectScaleFadeOut =BBCyclingLabelTransitionEffectFadeIn|

BBCyclingLabelTransitionEffectFadeOut|

BBCyclingLabelTransitionEffectZoomOut,

BBCyclingLabelTransitionEffectScaleFadeIn=BBCyclingLabelTransitionEffectFadeIn|

BBCyclingLabelTransitionEffectFadeOut|

BBCyclingLabelTransitionEffectZoomIn,

// These two move the entering label from above/below to center and exiting label up/down without cross-fade

// It's a good idea to set the clipsToBounds property of the BBCyclingLabel to true and use this in a confined space

BBCyclingLabelTransitionEffectScrollUp=1<<4,

BBCyclingLabelTransitionEffectScrollDown =1<<5,

BBCyclingLabelTransitionEffectDefault =BBCyclingLabelTransitionEffectCrossFade

} BBCyclingLabelTransitionEffect;

#pragma mark - Custom types

typedefvoid(^BBCyclingLabelPreTransitionBlock)(UILabel* labelToEnter);

typedefvoid(^BBCyclingLabelTransitionBlock)(UILabel* labelToExit,UILabel* labelToEnter);

#pragma mark -

@interfaceBBCyclingLabel :UIView

#pragma mark Public properties

@property(assign,nonatomic)BBCyclingLabelTransitionEffecttransitionEffect;

@property(copy,nonatomic)BBCyclingLabelPreTransitionBlockpreTransitionBlock;

@property(copy,nonatomic)BBCyclingLabelTransitionBlocktransitionBlock;

@property(assign,nonatomic)NSTimeIntervaltransitionDuration;

// Same properties as UILabel, these will be propagated to the underlying labels

@property(copy,nonatomic)NSString*text;

@property(strong,nonatomic)UIFont*font;

@property(strong,nonatomic)UIColor*textColor;

@property(strong,nonatomic)UIColor*shadowColor;

@property(assign,nonatomic)CGSizeshadowOffset;

@property(assign,nonatomic)UITextAlignmenttextAlignment;

@property(assign,nonatomic)UILineBreakModelineBreakMode;

@property(assign,nonatomic)NSIntegernumberOfLines;

@property(assign,nonatomic)BOOLadjustsFontSizeToFitWidth;

@property(assign,nonatomic)CGFloatminimumFontSize;

@property(assign,nonatomic)UIBaselineAdjustmentbaselineAdjustment;

#pragma mark Creation

- (id)initWithFrame:(CGRect)frame andTransitionType:(BBCyclingLabelTransitionEffect)transitionEffect;

#pragma mark Public methods

/*! Sets the text for the next label and performs a transition between current and next label (if animated is YES) */

- (void)setText:(NSString*)text animated:(BOOL)animated;

@end

BBCyclingLabel.m

#import"BBCyclingLabel.h"

#pragma mark - Constants

NSTimeIntervalconstkBBCyclingLabelDefaultTransitionDuration =0.3;

#pragma mark -

@interfaceBBCyclingLabel()

{

NSUInteger_currentLabelIndex;

}

#pragma mark Private properties

@property(strong,nonatomic)NSArray* labels;

@property(strong,nonatomic)UILabel* currentLabel;

#pragma mark Private helpers

- (void)setupWithEffect:(BBCyclingLabelTransitionEffect)effect andDuration:(NSTimeInterval)duration;

- (void)prepareTransitionBlocks;

- (NSUInteger)nextLabelIndex;

- (void)resetLabel:(UILabel*)label;

@end

#pragma mark -

@implementationBBCyclingLabel

#pragma mark Property synthesizers

@synthesizetransitionEffect=_transitionEffect;

@synthesizepreTransitionBlock =_preTransitionBlock;

@synthesizetransitionBlock=_transitionBlock;

@synthesizetransitionDuration =_transitionDuration;

// Private

@synthesizelabels=_labels;

@synthesizecurrentLabel =_currentLabel;

#pragma mark Creation

- (id)initWithFrame:(CGRect)frame

{

self= [superinitWithFrame:frame];

if(self!=nil) {

[selfsetupWithEffect:BBCyclingLabelTransitionEffectDefault

andDuration:kBBCyclingLabelDefaultTransitionDuration];

}

returnself;

}

- (id)initWithCoder:(NSCoder*)coder

{

self= [superinitWithCoder:coder];

if(self!=nil) {

[selfsetupWithEffect:BBCyclingLabelTransitionEffectDefault

andDuration:kBBCyclingLabelDefaultTransitionDuration];

}

returnself;

}

- (id)initWithFrame:(CGRect)frame andTransitionType:(BBCyclingLabelTransitionEffect)transitionEffect;

{

self= [superinitWithFrame:frame];

if(self!=nil) {

[selfsetupWithEffect:transitionEffect

andDuration:kBBCyclingLabelDefaultTransitionDuration];

}

returnself;

}

#pragma mark Manual property accessors

- (void)setTransitionEffect:(BBCyclingLabelTransitionEffect)transitionEffect

{

_transitionEffect= transitionEffect;

[selfprepareTransitionBlocks];

}

- (NSString*)text

{

return_currentLabel.text;

}

- (void)setText:(NSString*)text

{

[selfsetText:textanimated:YES];

}

- (UIFont*)font

{

return_currentLabel.font;

}

- (void)setFont:(UIFont*)font

{

for(UILabel* labelin_labels) {

label.font= font;

}

}

- (UIColor*)textColor

{

return_currentLabel.textColor;

}

- (void)setTextColor:(UIColor*)textColor

{

for(UILabel* labelin_labels) {

label.textColor= textColor;

}

}

- (UIColor*)shadowColor

{

return_currentLabel.shadowColor;

}

- (void)setShadowColor:(UIColor*)shadowColor

{

for(UILabel* labelin_labels) {

label.shadowColor= shadowColor;

}

}

- (CGSize)shadowOffset

{

return_currentLabel.shadowOffset;

}

- (void)setShadowOffset:(CGSize)shadowOffset

{

for(UILabel* labelin_labels) {

label.shadowOffset= shadowOffset;

}

}

- (UITextAlignment)textAlignment

{

return_currentLabel.textAlignment;

}

- (void)setTextAlignment:(UITextAlignment)textAlignment

{

for(UILabel* labelin_labels) {

label.textAlignment= textAlignment;

}

}

- (UILineBreakMode)lineBreakMode

{

return_currentLabel.lineBreakMode;

}

- (void)setLineBreakMode:(UILineBreakMode)lineBreakMode

{

for(UILabel* labelin_labels) {

label.lineBreakMode= lineBreakMode;

}

}

- (NSInteger)numberOfLines

{

return_currentLabel.numberOfLines;

}

- (void)setNumberOfLines:(NSInteger)numberOfLines

{

for(UILabel* labelin_labels) {

label.numberOfLines= numberOfLines;

}

}

- (BOOL)adjustsFontSizeToFitWidth

{

return_currentLabel.adjustsFontSizeToFitWidth;

}

- (void)setAdjustsFontSizeToFitWidth:(BOOL)adjustsFontSizeToFitWidth

{

for(UILabel* labelin_labels) {

label.adjustsFontSizeToFitWidth= adjustsFontSizeToFitWidth;

}

}

- (CGFloat)minimumFontSize

{

return_currentLabel.minimumFontSize;

}

- (void)setMinimumFontSize:(CGFloat)minimumFontSize

{

for(UILabel* labelin_labels) {

label.minimumFontSize= minimumFontSize;

}

}

- (UIBaselineAdjustment)baselineAdjustment

{

return_currentLabel.baselineAdjustment;

}

- (void)setBaselineAdjustment:(UIBaselineAdjustment)baselineAdjustment

{

for(UILabel* labelin_labels) {

label.baselineAdjustment= baselineAdjustment;

}

}

#pragma mark Public methods

- (void)setText:(NSString*)text animated:(BOOL)animated

{

NSUIntegernextLabelIndex = [selfnextLabelIndex];

UILabel* nextLabel = [_labelsobjectAtIndex:nextLabelIndex];

UILabel* previousLabel =_currentLabel;

nextLabel.text= text;

// Resetting the label state ensures we can change the transition type without extra code on pre-transition block.

// Without it a transition that has no alpha changes would have to ensure alpha = 1 on pre-transition block (as

// well as with every other possible animatable property)

[selfresetLabel:nextLabel];

// Update both current label index and current label pointer

self.currentLabel= nextLabel;

_currentLabelIndex= nextLabelIndex;

// Prepare the next label before the transition animation

if(_preTransitionBlock!=nil) {

_preTransitionBlock(nextLabel);

}else{

// If no pre-transition block is set, prepare the next label for a cross-fade

nextLabel.alpha=0;

}

// Unhide the label that's about to be shown

nextLabel.hidden=NO;

void(^changeBlock)() = ^() {

// Perform the user provided changes

if(_transitionBlock!=nil) {

_transitionBlock(previousLabel, nextLabel);

}else{

// If no transition block is set, perform a simple cross-fade

previousLabel.alpha=0;

nextLabel.alpha=1;

}

};

void(^completionBlock)(BOOL) = ^(BOOLfinished) {

if(finished) {

// TODO this is kind of bugged since all transitions that include affine transforms always return finished

// as true, even when it doesn't finish...

previousLabel.hidden=YES;

}

};

if(animated) {

// Animate the transition between both labels

[UIViewanimateWithDuration:_transitionDurationanimations:changeBlockcompletion:completionBlock];

}else{

changeBlock();

completionBlock(YES);

}

}

#pragma mark Private helpers

- (void)setupWithEffect:(BBCyclingLabelTransitionEffect)effect andDuration:(NSTimeInterval)duration

{

NSUIntegersize =2;

NSMutableArray* labels = [NSMutableArrayarrayWithCapacity:size];

for(NSUIntegeri =0; i < size; i++) {

UILabel* label = [[UILabelalloc]initWithFrame:self.bounds];

[selfaddSubview:label];

label.backgroundColor= [UIColorclearColor];

label.hidden=YES;

label.numberOfLines=0;

[labelsaddObject:label];

}

_currentLabelIndex=0;

self.currentLabel= [labelsobjectAtIndex:0];

self.labels= labels;

_currentLabel.hidden=NO;

self.transitionEffect= effect;

self.transitionDuration= duration;

}

- (void)prepareTransitionBlocks

{

//if matches custom

if(_transitionEffect==BBCyclingLabelTransitionEffectCustom) {

return;

}

BBCyclingLabelTransitionEffecttype =_transitionEffect;

self.preTransitionBlock= ^(UILabel* labelToEnter) {

if(type &BBCyclingLabelTransitionEffectFadeIn) {

labelToEnter.alpha=0;

}

if(type &BBCyclingLabelTransitionEffectZoomIn) {

labelToEnter.transform=CGAffineTransformMakeScale(0.5,0.5);

}

if(type & (BBCyclingLabelTransitionEffectScrollUp|BBCyclingLabelTransitionEffectScrollDown)) {

CGRectframe = labelToEnter.frame;

if(type &BBCyclingLabelTransitionEffectScrollUp) {

frame.origin.y=self.bounds.size.height;

}

if(type &BBCyclingLabelTransitionEffectScrollDown) {

frame.origin.y=0- frame.size.height;

}

labelToEnter.frame= frame;

}

};

self.transitionBlock= ^(UILabel* labelToExit,UILabel* labelToEnter) {

if(type &BBCyclingLabelTransitionEffectFadeIn) {

labelToEnter.alpha=1;

}

if(type &BBCyclingLabelTransitionEffectFadeOut) {

labelToExit.alpha=0;

}

if(type &BBCyclingLabelTransitionEffectZoomOut) {

labelToExit.transform=CGAffineTransformMakeScale(1.5,1.5);

}

if(type &BBCyclingLabelTransitionEffectZoomIn) {

labelToEnter.transform=CGAffineTransformIdentity;

}

if(type & (BBCyclingLabelTransitionEffectScrollUp|BBCyclingLabelTransitionEffectScrollDown)) {

CGRectframe = labelToExit.frame;

CGRectenterFrame = labelToEnter.frame;

if(type &BBCyclingLabelTransitionEffectScrollUp) {

frame.origin.y=0- frame.size.height;

enterFrame.origin.y=roundf((self.bounds.size.height/2) - (enterFrame.size.height/2));

}

if(type &BBCyclingLabelTransitionEffectScrollDown) {

frame.origin.y=self.bounds.size.height;

enterFrame.origin.y=roundf((self.bounds.size.height/2) - (enterFrame.size.height/2));

}

labelToExit.frame= frame;

labelToEnter.frame= enterFrame;

}

};

}

- (NSUInteger)nextLabelIndex

{

return(_currentLabelIndex+1) % [_labelscount];

}

- (void)resetLabel:(UILabel*)label

{

label.alpha=1;

label.transform=CGAffineTransformIdentity;

label.frame=self.bounds;

}

@end


先写这几个了,大家有好的UIlabel可以分享出来哈.

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

推荐阅读更多精彩内容