iOS之Quartz2D

什么是Quartz2D

  • Quartz2D是?個(gè)二維繪圖引擎,同時(shí)支持iOS和Mac系統(tǒng)
    Quartz2D的API是純C語?言的Quartz2D的API來自于Core Graphics框架
    Quartz2D的數(shù)據(jù)類型和函數(shù)基本都以CG作為前綴期奔,例如下面2個(gè)類型:
    1.CGContextRef
    2.CGPathRef

Quartz2D的path

Points

void CGContextMoveToPoint (
CGContextRef c,
CGFloat x,
CGFloat y
);
指定一個(gè)點(diǎn)成為current point
Quartz會(huì)跟蹤current point一般執(zhí)行完一個(gè)相關(guān)函數(shù)后,current point都會(huì)相應(yīng)的改變.


Lines

相關(guān)的幾個(gè)函數(shù)
void CGContextAddLineToPoint (
CGContextRef c,
CGFloat x,
CGFloat y
);
創(chuàng)建一條直線卦睹,從current point到 (x,y)
然后current point會(huì)變成(x,y)
void CGContextAddLines (
CGContextRef c,
const CGPoint points[],
size_t count
);
創(chuàng)建多條直線谎势,比如points有兩個(gè)點(diǎn)占遥,那么會(huì)畫兩條直線 從current point到 (x1,y1),
然后是(x1,y1)到(x2,y2)
然后current point會(huì)變成points中的最后一個(gè)點(diǎn)


Arcs

兩種方法創(chuàng)建弧度

  • 第一種
    void CGContextAddArc (
    CGContextRef c,
    CGFloat x, //圓心的x坐標(biāo)
    CGFloat y, //圓心的x坐標(biāo)
    CGFloat radius, //圓的半徑
    CGFloat startAngle, //開始弧度
    CGFloat endAngle, //結(jié)束弧度
    int clockwise //0表示順時(shí)針,1表示逆時(shí)針
    );
    假如想創(chuàng)建一個(gè)完整的圓圈私股,那么 開始弧度就是0 結(jié)束弧度是 2pi议街, 因?yàn)閳A周長(zhǎng)是 2pir.
    最后割捅,函數(shù)執(zhí)行完后奶躯,current point就被重置為(x,y).
    還有一點(diǎn)要注意的是,假如當(dāng)前path已經(jīng)存在一個(gè)subpath亿驾,那么這個(gè)函數(shù)執(zhí)行的另外一個(gè)效果是
    會(huì)有一條直線嘹黔,從current point到弧的起點(diǎn)
  • 第二種
    void CGContextAddArcToPoint (
    CGContextRef c,
    CGFloat x1, //端點(diǎn)1的x坐標(biāo)
    CGFloat y1, //端點(diǎn)1的y坐標(biāo)
    CGFloat x2, //端點(diǎn)2的x坐標(biāo)
    CGFloat y2, //端點(diǎn)2的y坐標(biāo)
    CGFloat radius //半徑
    );
    原理:首先畫兩條線,這兩條線分別是 current point to (x1,y1) 和(x1,y1) to (x2,y2).
    這樣就是出現(xiàn)一個(gè)以(x1,y1)為頂點(diǎn)的兩條射線莫瞬,
    然后定義半徑長(zhǎng)度儡蔓,這個(gè)半徑是垂直于兩條射線的,這樣就能決定一個(gè)圓了乏悄,更好的理解看下圖浙值,不過個(gè)人認(rèn)為下圖所標(biāo)的 tangent point 1的位置是錯(cuò)誤的。
    最后檩小,函數(shù)執(zhí)行完后开呐,current point就被重置為(x2,y2).
    還有一點(diǎn)要注意的是,假如當(dāng)前path已經(jīng)存在一個(gè)subpath规求,那么這個(gè)函數(shù)執(zhí)行的另外一個(gè)效果是
    會(huì)有一條直線筐付,從current point到(x1,y1)
1512365049866613352.gif

Curves

畫曲線,一般是一條直線阻肿,然后定義幾個(gè)控制點(diǎn)瓦戚,使直線變彎曲。

  • 三次曲線函數(shù)
    void CGContextAddCurveToPoint (
    CGContextRef c,
    CGFloat cp1x, //控制點(diǎn)1 x坐標(biāo)
    CGFloat cp1y, //控制點(diǎn)1 y坐標(biāo)
    CGFloat cp2x, //控制點(diǎn)2 x坐標(biāo)
    CGFloat cp2y, //控制點(diǎn)2 y坐標(biāo)
    CGFloat x, //直線的終點(diǎn) x坐標(biāo)
    CGFloat y //直線的終點(diǎn) y坐標(biāo)
    );
    假如第二個(gè)控制點(diǎn)(cp2x丛塌,cp2y)比(cp1x,cp1y) 更接近c(diǎn)urrent point较解,那么會(huì)形成一個(gè)封閉的曲線
3251035981009400471.gif
  • 二次曲線函數(shù)
    void CGContextAddQuadCurveToPoint (
    CGContextRef c,
    CGFloat cpx, //控制點(diǎn) x坐標(biāo)
    CGFloat cpy, //控制點(diǎn) y坐標(biāo)
    CGFloat x, //直線的終點(diǎn) x坐標(biāo)
    CGFloat y //直線的終點(diǎn) y坐標(biāo)
    );
    執(zhí)行完函數(shù)貌似current point不會(huì)變化,沒有具體測(cè)試過
2313724308561861661.gif

Ellipses橢圓

void CGContextAddEllipseInRect (
CGContextRef context,
CGRect rect //一矩形
);
如果矩形是一個(gè)正方形赴邻,那么畫出來就是一個(gè)圓


Rectangles矩形

void CGContextAddRect (
CGContextRef c,
CGRect rect
);

Quartz2D畫圖練習(xí)

  • 畫線
QQ20170304-213008@2x.png
- (void)drawRect:(CGRect)rect
{

    // 1.獲得圖形上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 2.拼接圖形(路徑)
    // 設(shè)置線段寬度
    CGContextSetLineWidth(ctx, 10);
    
    // 設(shè)置線段頭尾部的樣式
    CGContextSetLineCap(ctx, kCGLineCapRound);
    
    // 設(shè)置線段轉(zhuǎn)折點(diǎn)的樣式
    CGContextSetLineJoin(ctx, kCGLineJoinRound);
    
    /**  第1根線段  **/
    // 設(shè)置顏色
    CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1);
    // 設(shè)置一個(gè)起點(diǎn)
    CGContextMoveToPoint(ctx, 10, 10);
    // 添加一條線段到(100, 100)
    CGContextAddLineToPoint(ctx, 100, 100);
    
    // 渲染一次
    CGContextStrokePath(ctx);
    
    
    /**  第2根線段  **/
    // 設(shè)置顏色
    CGContextSetRGBStrokeColor(ctx, 0, 0, 1, 1);
    // 設(shè)置一個(gè)起點(diǎn)
    CGContextMoveToPoint(ctx, 200, 190);
    // 添加一條線段到(150, 40)
    CGContextAddLineToPoint(ctx, 150, 40);
    CGContextAddLineToPoint(ctx, 120, 60);
    
    
    // 3.渲染顯示到view上面
    CGContextStrokePath(ctx);
}

  • 矩形
屏幕快照 2017-03-04 下午9.40.15.png
// 1.獲得上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 2.畫矩形
    CGContextAddRect(ctx, CGRectMake(10, 10, 150, 50));
    
    // set : 同時(shí)設(shè)置為實(shí)心和空心顏色
    // setStroke : 設(shè)置空心顏色
    // setFill : 設(shè)置實(shí)心顏色
    [[UIColor greenColor] set];
    
//    CGContextSetRGBFillColor(ctx, 0, 0, 1, 1);
    
    // 3.繪制圖形
    CGContextFillPath(ctx);
  • 三角形
屏幕快照 2017-03-04 下午9.43.36.png
 // 1.獲得上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 2.畫三角形
    CGContextMoveToPoint(ctx, 0, 0);
    CGContextAddLineToPoint(ctx, 100, 100);
    CGContextAddLineToPoint(ctx, 150, 80);
    // 關(guān)閉路徑(連接起點(diǎn)和最后一個(gè)點(diǎn))
    CGContextClosePath(ctx);
    
    //
    CGContextSetRGBStrokeColor(ctx, 0, 1, 0, 1);
    
    // 3.繪制圖形
    CGContextStrokePath(ctx);

  • 畫圓
QQ20170304-214725@2x.png
// 1.獲得上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 2.畫1/4圓
    CGContextMoveToPoint(ctx, 100, 100);
    CGContextAddLineToPoint(ctx, 100, 150);
    CGContextAddArc(ctx, 100, 100, 50, -M_PI_2, M_PI, 1);
    CGContextClosePath(ctx);
    
    [[UIColor redColor] set];
    
    // 3.顯示所繪制的東西
    CGContextFillPath(ctx);


  • 圓弧
703667CD-B6C3-4B91-BB20-D4A9AB525D25.png
// 1.獲得上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 2.畫圓弧
    // x\y : 圓心
    // radius : 半徑
    // startAngle : 開始角度
    // endAngle : 結(jié)束角度
    // clockwise : 圓弧的伸展方向(0:順時(shí)針, 1:逆時(shí)針)
    CGContextAddArc(ctx, 100, 10, 50, M_PI_2, M_PI, 0);
    
    [[UIColor redColor] set];
    
    // 3.顯示所繪制的東西
    CGContextFillPath(ctx);

DF1E7A0B-8E11-41E3-949C-6FC1667C0336.png
   // 1.獲得上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 2.畫圓
    CGContextAddEllipseInRect(ctx, CGRectMake(50, 10, 100, 100));
    
    CGContextSetLineWidth(ctx, 10);
    
    [[UIColor greenColor] set];
    
    // 3.顯示所繪制的東西
    CGContextStrokePath(ctx);

  • 畫文字和圖片
3197FDD1-469B-4340-9590-DAEEA86FC7F3.png

// 1.取得圖片
   UIImage *image = [UIImage imageNamed:@"me"];
   
   // 2.畫
//    [image drawAtPoint:CGPointMake(50, 50)];
//    [image drawInRect:CGRectMake(0, 0, 150, 150)];
   [image drawAsPatternInRect:CGRectMake(0, 0, 200, 200)];
   
   // 3.畫文字
   NSString *str = @"為xxx所畫";
   [str drawInRect:CGRectMake(0, 0, 100, 30) withAttributes:nil];

  • 畫文字
// 1.獲得上下文
   CGContextRef ctx = UIGraphicsGetCurrentContext();
   // 2.畫矩形
   CGRect cubeRect = CGRectMake(50, 50, 100, 100);
   CGContextAddRect(ctx, cubeRect);
   // 3.顯示所繪制的東西
   CGContextFillPath(ctx);
   // 4.畫文字
   NSString *str = @"你好";
   //    [str drawAtPoint:CGPointZero withAttributes:nil];
   
   NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
   // NSForegroundColorAttributeName : 文字顏色
   // NSFontAttributeName : 字體
   attrs[NSForegroundColorAttributeName] = [UIColor redColor];
   attrs[NSFontAttributeName] = [UIFont systemFontOfSize:50];
   [str drawInRect:cubeRect withAttributes:attrs];

  • 圖形上下文棧
FAD706EB-BC77-4A1D-AB5E-1C3D566A1FA0.png

 // 1.獲得上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 將ctx拷貝一份放到棧中
    CGContextSaveGState(ctx);
    
    // 設(shè)置繪圖狀態(tài)
    CGContextSetLineWidth(ctx, 10);
    [[UIColor redColor] set];
    CGContextSetLineCap(ctx, kCGLineCapRound);
    
    // 第1根線
    CGContextMoveToPoint(ctx, 50, 50);
    CGContextAddLineToPoint(ctx, 120, 190);
    
    CGContextStrokePath(ctx);
    
    // 將棧頂?shù)纳舷挛某鰲?替換當(dāng)前的上下文
    CGContextRestoreGState(ctx);
    
    
    // 第2根線
    CGContextMoveToPoint(ctx, 10, 70);
    CGContextAddLineToPoint(ctx, 220, 290);
    
    CGContextStrokePath(ctx);
//    CGContextDrawPath(ctx, kCGPathStroke);

  • 矩陣操作
A88311CB-7DF1-4B6E-9467-5066BC126027.png

 CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    
    CGContextSaveGState(ctx);
    
    CGContextRotateCTM(ctx, M_PI_4 * 0.3);
    CGContextScaleCTM(ctx, 0.5, 0.5);
    CGContextTranslateCTM(ctx, 0, 150);
    
    CGContextAddRect(ctx, CGRectMake(10, 10, 50, 50));
    
    CGContextStrokePath(ctx);
    
    CGContextRestoreGState(ctx);
    
    CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 100, 100));
    CGContextMoveToPoint(ctx, 100, 100);
    CGContextAddLineToPoint(ctx, 200, 250);
    
    CGContextStrokePath(ctx);

  • 裁剪
CBB87E5C-F965-4431-9213-EA36333BE1EA.png
 CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    CGContextSaveGState(ctx);
    
    // 0.畫圓
    CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 100, 100));
    [[UIColor redColor] set];
    // 裁剪
    CGContextClip(ctx);
    CGContextFillPath(ctx);
    
    // 1.顯示圖片
    UIImage *image = [UIImage imageNamed:@"1"];
    [image drawAtPoint:CGPointMake(100, 100)];
    
    CGContextRestoreGState(ctx);
    
    CGContextAddRect(ctx, CGRectMake(0, 0, 50, 50));
    [[UIColor yellowColor] set];
    CGContextFillPath(ctx);

  • 提示:- (void)drawRect:(CGRect)rect默認(rèn)只會(huì)在view第一次顯示的時(shí)候調(diào)用(只能由系統(tǒng)自動(dòng)調(diào)用, 不能手動(dòng)調(diào)用)印衔,如果要重新繪制調(diào)用 setNeedsDisplay方法。

  • 定時(shí)器快速調(diào)用setNeedsDisplay姥敛,如果是一秒調(diào)用一次可以用NSTimer奸焙,如果0.1秒調(diào)用一次,要用CADisplayLink。每秒刷新60次与帆。

 CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(setNeedsDisplay)];
    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

  • CGMutablePathRef 的使用了赌。
A637D1D1-B495-43C8-84D0-AF4709455F50.png
CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 1.先創(chuàng)建一個(gè)路徑
    CGMutablePathRef linePath = CGPathCreateMutable();
    
    // 2.拼接路徑
    CGPathMoveToPoint(linePath, NULL, 0, 0);
    CGPathAddLineToPoint(linePath, NULL, 100, 100);
    
    // 3.添加路徑到上下文
    CGContextAddPath(ctx, linePath);
    
    CGMutablePathRef circlePath = CGPathCreateMutable();
    CGPathAddArc(circlePath, NULL, 150, 150, 50, 0, M_PI * 2, 0);
    CGContextAddPath(ctx, circlePath);
    
    // 4.渲染
    CGContextStrokePath(ctx);
    
    
    CGPathRelease(linePath);
    CGPathRelease(circlePath);


  • 水印
C429C3FF-63B5-4A5B-8ED9-CCBC314BEF7C.png

+ (instancetype)waterImageWithBg:(NSString *)bg logo:(NSString *)logo
{
    UIImage *bgImage = [UIImage imageNamed:bg];
    // 上小文 : 基于位圖(bitmap) ,  所有的東西需要繪制到一張新的圖片上去
    
    // 1.創(chuàng)建一個(gè)基于位圖的上下文(開啟一個(gè)基于位圖的上下文)
    // size : 新圖片的尺寸
    // opaque : YES : 不透明,  NO : 透明
    // 這行代碼過后.就相當(dāng)于常見一張新的bitmap,也就是新的UIImage對(duì)象
    // 1.創(chuàng)建一個(gè)基于位圖的上下文(開啟一個(gè)基于位圖的上下文)
    UIGraphicsBeginImageContextWithOptions(bgImage.size, NO, 0.0);
    
    // 2.畫背景
    [bgImage drawInRect:CGRectMake(0, 0, bgImage.size.width, bgImage.size.height)];
    
    // 3.畫右下角的水印
    UIImage *waterImage = [UIImage imageNamed:logo];
    CGFloat scale = 0.2;
    CGFloat margin = 5;
    CGFloat waterW = waterImage.size.width * scale;
    CGFloat waterH = waterImage.size.height * scale;
    CGFloat waterX = bgImage.size.width - waterW - margin;
    CGFloat waterY = bgImage.size.height - waterH - margin;
    [waterImage drawInRect:CGRectMake(waterX, waterY, waterW, waterH)];
    
    // 4.從上下文中取得制作完畢的UIImage對(duì)象
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 5.結(jié)束上下文
    UIGraphicsEndImageContext();
    
    return newImage;
}

  • 圖片裁剪
808D036F-84C8-4A5D-BF4B-1C420211FCF5.png

+ (instancetype)circleImageWithName:(NSString *)name borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor
{
    // 1.加載原圖
    UIImage *oldImage = [UIImage imageNamed:name];
    
    // 2.開啟上下文
    CGFloat imageW = oldImage.size.width + 2 * borderWidth;
    CGFloat imageH = oldImage.size.height + 2 * borderWidth;
    CGSize imageSize = CGSizeMake(imageW, imageH);
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);
    
    // 3.取得當(dāng)前的上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 4.畫邊框(大圓)
    [borderColor set];
    CGFloat bigRadius = imageW * 0.5; // 大圓半徑
    CGFloat centerX = bigRadius; // 圓心
    CGFloat centerY = bigRadius;
    CGContextAddArc(ctx, centerX, centerY, bigRadius, 0, M_PI * 2, 0);
    CGContextFillPath(ctx); // 畫圓
    
    // 5.小圓
    CGFloat smallRadius = bigRadius - borderWidth;
    CGContextAddArc(ctx, centerX, centerY, smallRadius, 0, M_PI * 2, 0);
    // 裁剪(后面畫的東西才會(huì)受裁剪的影響)
    CGContextClip(ctx);
    
    // 6.畫圖
    [oldImage drawInRect:CGRectMake(borderWidth, borderWidth, oldImage.size.width, oldImage.size.height)];
    
    // 7.取圖
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 8.結(jié)束上下文
    UIGraphicsEndImageContext();
    
    return newImage;
}


  • 屏幕截圖
+ (instancetype)captureWithView:(UIView *)view
{
    // 1.開啟上下文
    UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);
    
    // 2.將控制器view的layer渲染到上下文
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    
    // 3.取出圖片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 4.結(jié)束上下文
    UIGraphicsEndImageContext();
    
    return newImage;
}

  • 條紋背景
33CF02AD-C767-4D39-BAC0-2456FC4F696D.png
 // 1.創(chuàng)建一行背景圖片
    CGFloat rowW = self.view.frame.size.width;
//    CGFloat rowH = 40;
    CGFloat rowH = 30;
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(rowW, rowH), NO, 0.0);
    
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    // 畫矩形框
    [[UIColor redColor] set];
    CGContextAddRect(ctx, CGRectMake(0, 0, rowW, rowH));
    CGContextFillPath(ctx);
    
    // 2.畫線
    [[UIColor greenColor] set];
    CGFloat lineWidth = 2;
    CGContextSetLineWidth(ctx, lineWidth);
    CGFloat dividerX = 0;
    CGFloat dividerY = rowH - lineWidth;
    CGContextMoveToPoint(ctx, dividerX, dividerY);
    CGContextAddLineToPoint(ctx, rowW - dividerX, dividerY);
    CGContextStrokePath(ctx);
    
    // 3.取圖
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 4.結(jié)束上下文
    UIGraphicsEndImageContext();
    
    // 5.設(shè)置為背景
    self.textView.backgroundColor = [UIColor colorWithPatternImage:newImage];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市玄糟,隨后出現(xiàn)的幾起案子勿她,更是在濱河造成了極大的恐慌,老刑警劉巖茶凳,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫂拴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡贮喧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門猪狈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箱沦,“玉大人,你說我怎么就攤上這事雇庙∥叫危” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵疆前,是天一觀的道長(zhǎng)寒跳。 經(jīng)常有香客問我,道長(zhǎng)竹椒,這世上最難降的妖魔是什么童太? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮胸完,結(jié)果婚禮上书释,老公的妹妹穿的比我還像新娘。我一直安慰自己赊窥,他們只是感情好爆惧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锨能,像睡著了一般扯再。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上址遇,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天熄阻,我揣著相機(jī)與錄音,去河邊找鬼傲隶。 笑死饺律,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播复濒,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼脖卖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了巧颈?” 一聲冷哼從身側(cè)響起畦木,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砸泛,沒想到半個(gè)月后十籍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唇礁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年勾栗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盏筐。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡围俘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出琢融,到底是詐尸還是另有隱情界牡,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布漾抬,位于F島的核電站宿亡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏纳令。R本人自食惡果不足惜挽荠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泊碑。 院中可真熱鬧坤按,春花似錦、人聲如沸馒过。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腹忽。三九已至来累,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窘奏,已是汗流浹背嘹锁。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留着裹,地道東北人领猾。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親摔竿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子面粮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容