UIGestureRecognizer學(xué)習(xí)筆記

在 iPhone 或 iPad 的開發(fā)中烟阐,除了用 touchesBegan / touchesMoved / touchesEnded 這組方法來控制使用者的手指觸控外偎快,也可以用 UIGestureRecognizer 的衍生類別來進(jìn)行判斷岗屏。用 UIGestureRecognizer 的好處在于有現(xiàn)成的手勢(shì),開發(fā)者不用自己計(jì)算手指移動(dòng)軌跡。UIGestureRecognizer的衍生類別有以下幾種:
UITapGestureRecognizer
UIPinchGestureRecognizer
UIRotationGestureRecognizer
UISwipeGestureRecognizer
UIPanGestureRecognizer
UILongPressGestureRecognizer

從命名上不難了解這些類別所對(duì)應(yīng)代表的手勢(shì)布近,分別是 Tap(點(diǎn)一下)因惭、Pinch(二指往內(nèi)或往外撥動(dòng))岳锁、Rotation(旋轉(zhuǎn))、Swipe(滑動(dòng)蹦魔,快速移動(dòng))激率、Pan (拖移,慢速移動(dòng))以及 LongPress(長(zhǎng)按)勿决。這些手勢(shì)別在使用上也很簡(jiǎn)單乒躺,只要在使用前定義并添加到對(duì)應(yīng)的視圖上即可。
The concrete subclasses of UIGestureRecognizer
are the following:
UITapGestureRecognizer

UIPinchGestureRecognizer

UIRotationGestureRecognizer

UISwipeGestureRecognizer

UIPanGestureRecognizer

UILongPressGestureRecognizer

一個(gè)gesture recognizer是針對(duì)一個(gè)特定的view的(包含其subview)低缩,用UIView的方法addGestureRecognize:去關(guān)聯(lián)一個(gè)view

一個(gè)gesture recognizer是不參與UIView的事件響應(yīng)鏈的

各個(gè)手勢(shì)使用時(shí)的代碼:
UITapGestureRecognizer

  • (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view from its nib.



UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];

if (![tapGesture respondsToSelector:@selector(locationInView:)]) {

    [tapGesture release];

    tapGesture = nil;

}else {

    tapGesture.delegate = self;

    tapGesture.numberOfTapsRequired = 1; // The default value is 1.

    tapGesture.numberOfTouchesRequired = 1; // The default value is 1.

    [self.view addGestureRecognizer:tapGesture];

}

}

  • (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer

{

UIView *view = [gestureRecognizer view]; // 這個(gè)view是手勢(shì)所屬的view嘉冒,也就是增加手勢(shì)的那個(gè)view



switch (gestureRecognizer.state) {

    case UIGestureRecognizerStateEnded:{ // UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 正常情況下只響應(yīng)這個(gè)消息

        NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");

        break;

    }

    case UIGestureRecognizerStateFailed:{ // 

        NSLog(@"======UIGestureRecognizerStateFailed");

        break;

    }

    case UIGestureRecognizerStatePossible:{ // 

        NSLog(@"======UIGestureRecognizerStatePossible");

        break;

    }

    default:{

        NSLog(@"======Unknow gestureRecognizer");

        break;

    }

}  

}

// 詢問一個(gè)手勢(shì)接收者是否應(yīng)該開始解釋執(zhí)行一個(gè)觸摸接收事件

  • (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

// CGPoint currentPoint = [gestureRecognizer locationInView:self.view];

// if (CGRectContainsPoint(CGRectMake(0, 0, 100, 100), currentPoint) ) {

// return YES;

// }

//

// return NO;

return YES;

}

// 詢問delegate,兩個(gè)手勢(shì)是否同時(shí)接收消息咆繁,返回YES同事接收讳推。返回NO,不同是接收(如果另外一個(gè)手勢(shì)返回YES玩般,則并不能保證不同時(shí)接收消息)the default implementation returns NO银觅。

// 這個(gè)函數(shù)一般在一個(gè)手勢(shì)接收者要阻止另外一個(gè)手勢(shì)接收自己的消息的時(shí)候調(diào)用

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

    return NO;

}

// 詢問delegate是否允許手勢(shì)接收者接收一個(gè)touch對(duì)象

// 返回YES,則允許對(duì)這個(gè)touch對(duì)象審核坏为,NO究驴,則不允許。

// 這個(gè)方法在touchesBegan:withEvent:之前調(diào)用匀伏,為一個(gè)新的touch對(duì)象進(jìn)行調(diào)用

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

    return YES;

}

UIPinchGestureRecognizer

  • (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view from its nib.



UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];

if (![pinchGesture respondsToSelector:@selector(locationInView:)]) {

    [pinchGesture release];

    pinchGesture = nil;

}else {

    pinchGesture.delegate = self;

    [self.view addGestureRecognizer: pinchGesture];

}  

}

  • (void)handleGesture:(UIPinchGestureRecognizer *)gestureRecognizer

{

UIView *view = [gestureRecognizer view]; // 這個(gè)view是手勢(shì)所屬的view洒忧,也就是增加手勢(shì)的那個(gè)view







CGFloat scale = gestureRecognizer.scale;

NSLog(@"======scale: %f", scale);



CGFloat velocity = gestureRecognizer.velocity;

NSLog(@"======scvelocityale: %f", velocity);





switch (gestureRecognizer.state) {

    case UIGestureRecognizerStateEnded:{ // UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded

        NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");

        break;

    }

    case UIGestureRecognizerStateBegan:{ // 

        NSLog(@"======UIGestureRecognizerStateBegan");

        break;

    }

    case UIGestureRecognizerStateChanged:{ // 

        NSLog(@"======UIGestureRecognizerStateChanged");

        

        gestureRecognizer.view.transform = CGAffineTransformScale(gestureRecognizer.view.transform, gestureRecognizer.scale, gestureRecognizer.scale);

        gestureRecognizer.scale = 1; // 重置,很重要9坏摺N跏獭!

        

        break;

    }

    case UIGestureRecognizerStateCancelled:{ // 

        NSLog(@"======UIGestureRecognizerStateCancelled");

        break;

    }

    case UIGestureRecognizerStateFailed:{ // 

        NSLog(@"======UIGestureRecognizerStateFailed");

        break;

    }

    case UIGestureRecognizerStatePossible:{ // 

        NSLog(@"======UIGestureRecognizerStatePossible");

        break;

    }

    default:{

        NSLog(@"======Unknow gestureRecognizer");

        break;

    }

}  

}

recognizer.scale是pinch手勢(shì)的scale值,它每次都是從1開始蛉抓,以兩指的距離為參考牢硅,如果捏合兩指,則scale變兄パ减余;如果兩指向外拉,則scale變大

UIRotationGestureRecognizer

  • (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view from its nib.

UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];

if (![rotationGesture respondsToSelector:@selector(locationInView:)]) {

    [rotationGesture release];

    rotationGesture = nil;

}else {

    rotationGesture.delegate = self;

    

    [self.view addGestureRecognizer:rotationGesture];

}

}

  • (void)handleGesture:(UIRotationGestureRecognizer *)gestureRecognizer

{

UIView *view = [gestureRecognizer view]; // 這個(gè)view是手勢(shì)所屬的view惩系,也就是增加手勢(shì)的那個(gè)view







CGFloat rotation = gestureRecognizer.rotation;

NSLog(@"===rotation: %f", rotation);



CGFloat velocity = gestureRecognizer.velocity;

NSLog(@"======velocity: %f", velocity);









switch (gestureRecognizer.state) {

    case UIGestureRecognizerStateEnded:{ // UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded

        NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");

        break;

    }

    case UIGestureRecognizerStateBegan:{ // 

        NSLog(@"======UIGestureRecognizerStateBegan");

        break;

    }

    case UIGestureRecognizerStateChanged:{ // 

        NSLog(@"======UIGestureRecognizerStateChanged");

        

        gestureRecognizer.view.transform = CGAffineTransformRotate(gestureRecognizer.view.transform, gestureRecognizer.rotation);

        gestureRecognizer.rotation = 0; // 重置 這個(gè)相當(dāng)重要N徊怼!堡牡! 

        

        break;

    }

    case UIGestureRecognizerStateCancelled:{ // 

        NSLog(@"======UIGestureRecognizerStateCancelled");

        break;

    }

    case UIGestureRecognizerStateFailed:{ // 

        NSLog(@"======UIGestureRecognizerStateFailed");

        break;

    }

    case UIGestureRecognizerStatePossible:{ // 

        NSLog(@"======UIGestureRecognizerStatePossible");

        break;

    }

    default:{

        NSLog(@"======Unknow gestureRecognizer");

        break;

    }

}  

}

UISwipeGestureRecognizer

  • (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view from its nib.







// right

UISwipeGestureRecognizer *swipeGestureRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];

if (![swipeGestureRight respondsToSelector:@selector(locationInView:)]) {

    [swipeGestureRight release];

    swipeGestureRight = nil;

}else {

    swipeGestureRight.delegate = self;

    swipeGestureRight.numberOfTouchesRequired = 1;// 手指?jìng)€(gè)數(shù) The default value is 1.

    swipeGestureRight.direction = UISwipeGestureRecognizerDirectionRight;// 同一個(gè)手勢(shì)只能指定一個(gè)方向抒抬,不能同時(shí)指定多個(gè)方向,要指定多個(gè)方向 必須用多個(gè)手勢(shì)

    [self.view addGestureRecognizer:swipeGestureRight];

}



// left

UISwipeGestureRecognizer *swipeGestureLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];

if (![swipeGestureLeft respondsToSelector:@selector(locationInView:)]) {

    [swipeGestureLeft release];

    swipeGestureLeft = nil;

}else {

    swipeGestureLeft.delegate = self;

    swipeGestureLeft.numberOfTouchesRequired = 1;// 手指?jìng)€(gè)數(shù) The default value is 1.

    swipeGestureLeft.direction = UISwipeGestureRecognizerDirectionLeft;// 同一個(gè)手勢(shì)只能指定一個(gè)方向晤柄,不能同時(shí)指定多個(gè)方向擦剑,要指定多個(gè)方向 必須用多個(gè)手勢(shì)

    [self.view addGestureRecognizer:swipeGestureLeft];

}



// Up

UISwipeGestureRecognizer *swipeGestureUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];

if (![swipeGestureUp respondsToSelector:@selector(locationInView:)]) {

    [swipeGestureUp release];

    swipeGestureUp = nil;

}else {

    swipeGestureUp.delegate = self;

    swipeGestureUp.numberOfTouchesRequired = 1;// 手指?jìng)€(gè)數(shù) The default value is 1.

    swipeGestureUp.direction = UISwipeGestureRecognizerDirectionUp;// 同一個(gè)手勢(shì)只能指定一個(gè)方向,不能同時(shí)指定多個(gè)方向芥颈,要指定多個(gè)方向 必須用多個(gè)手勢(shì)

    [self.view addGestureRecognizer:swipeGestureUp];

}



// Down

UISwipeGestureRecognizer *swipeGestureDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];

if (![swipeGestureDown respondsToSelector:@selector(locationInView:)]) {

    [swipeGestureDown release];

    swipeGestureDown = nil;

}else {

    swipeGestureDown.delegate = self;

    swipeGestureDown.numberOfTouchesRequired = 1;// 手指?jìng)€(gè)數(shù) The default value is 1.

    swipeGestureDown.direction = UISwipeGestureRecognizerDirectionDown;// 同一個(gè)手勢(shì)只能指定一個(gè)方向惠勒,不能同時(shí)指定多個(gè)方向,要指定多個(gè)方向 必須用多個(gè)手勢(shì)

    [self.view addGestureRecognizer:swipeGestureDown];

}

}

  • (void)handleGesture:(UISwipeGestureRecognizer *)gestureRecognizer

{

UIView *view = [gestureRecognizer view]; // 這個(gè)view是手勢(shì)所屬的view爬坑,也就是增加手勢(shì)的那個(gè)view





UISwipeGestureRecognizerDirection direction = gestureRecognizer.direction;

switch (direction) {

    case UISwipeGestureRecognizerDirectionRight:

    {

        NSLog(@"direction==UISwipeGestureRecognizerDirectionRight");

        break;

    }

    case UISwipeGestureRecognizerDirectionLeft:

    {

        NSLog(@"direction==UISwipeGestureRecognizerDirectionLeft");

        break;

    }

    case UISwipeGestureRecognizerDirectionUp:

    {

        NSLog(@"direction==UISwipeGestureRecognizerDirectionUp");

        break;

    }

    case UISwipeGestureRecognizerDirectionDown:

    {

        NSLog(@"direction==UISwipeGestureRecognizerDirectionDown");

        break;

    }

    default:

        break;

}







switch (gestureRecognizer.state) {

    case UIGestureRecognizerStateEnded:{ // UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded

        NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");

        break;

    }

    default:{

        NSLog(@"======Unknow gestureRecognizer");

        break;

    }

}  

}

UIPanGestureRecognizer

  • (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view from its nib.



UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];

view.backgroundColor = [UIColor blueColor];

[self.view addSubview:view];





UIPanGestureRecognizer *panPressGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];

if (![panPressGesture respondsToSelector:@selector(locationInView:)]) {

    [panPressGesture release];

    panPressGesture = nil;

}else {

    panPressGesture.delegate = self;

    panPressGesture.maximumNumberOfTouches = NSUIntegerMax;// The default value is NSUIntegerMax. 

   

    panPressGesture.minimumNumberOfTouches = 1;// The default value is 1.

    [view addGestureRecognizer:panPressGesture];

}

}

// 拖拽手勢(shì)

  • (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer

{

UIView *view = [gestureRecognizer view]; // 這個(gè)view是手勢(shì)所屬的view纠屋,也就是增加手勢(shì)的那個(gè)view





switch (gestureRecognizer.state) {

    case UIGestureRecognizerStateBegan:{ 

        NSLog(@"======UIGestureRecognizerStateBegan");

        break;

    }

    case UIGestureRecognizerStateChanged:{ 

        NSLog(@"======UIGestureRecognizerStateChanged");

        

       

        

        CGPoint translation = [gestureRecognizer translationInView:self.view];

        view.center = CGPointMake(gestureRecognizer.view.center.x + translation.x, gestureRecognizer.view.center.y + translation.y);

        [gestureRecognizer setTranslation:CGPointMake(0, 0) inView:self.view];//  注意一旦你完成上述的移動(dòng),將translation重置為0十分重要盾计。否則translation每次都會(huì)疊加售担,很快你的view就會(huì)移除屏幕!

        break;

    }

    case UIGestureRecognizerStateCancelled:{ 

        NSLog(@"======UIGestureRecognizerStateCancelled");

        break;

    }

    case UIGestureRecognizerStateFailed:{ 

        NSLog(@"======UIGestureRecognizerStateFailed");

        break;

    }

    case UIGestureRecognizerStatePossible:{ 

        NSLog(@"======UIGestureRecognizerStatePossible");

        break;

    }

    case UIGestureRecognizerStateEnded:{ // UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded

        

       

        

        NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");

        

        CGPoint velocity = [gestureRecognizer velocityInView:self.view];// 分別得出x署辉,y軸方向的速度向量長(zhǎng)度(velocity代表按照當(dāng)前速度族铆,每秒可移動(dòng)的像素個(gè)數(shù),分xy軸兩個(gè)方向)

        CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y));// 根據(jù)直角三角形的算法算出綜合速度向量長(zhǎng)度

        

        // 如果長(zhǎng)度小于200哭尝,則減少基本速度哥攘,否則增加它。

        CGFloat slideMult = magnitude / 200;

        

        NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult);

        float slideFactor = 0.1 * slideMult; // Increase for more of a slide

        

        // 基于速度和滑動(dòng)因子計(jì)算終點(diǎn)

        CGPoint finalPoint = CGPointMake(view.center.x + (velocity.x * slideFactor),

                                         view.center.y + (velocity.y * slideFactor));

        

        // 確定終點(diǎn)在視圖邊界內(nèi)

        finalPoint.x = MIN(MAX(finalPoint.x, 0), self.view.bounds.size.width);

        finalPoint.y = MIN(MAX(finalPoint.y, 0), self.view.bounds.size.height);

        

        [UIView animateWithDuration:slideFactor*2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{

            view.center = finalPoint;  

        } completion:nil];

        

        break;

    }

    default:{

        NSLog(@"======Unknow gestureRecognizer");

        break;

    }

}  

}

UILongPressGestureRecognizer

  • (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view from its nib.

UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];

if (![longPressGesture respondsToSelector:@selector(locationInView:)]) {

    [longPressGesture release];

    longPressGesture = nil;

}else {

    longPressGesture.delegate = self;

    longPressGesture.numberOfTapsRequired = 0;      // The default number of taps is 0.

    longPressGesture.minimumPressDuration = 0.1f;    // The default duration is is 0.5 seconds.

    longPressGesture.numberOfTouchesRequired = 1;   // The default number of fingers is 1.

    longPressGesture.allowableMovement = 10;        // The default distance is 10 pixels.

    [self.view addGestureRecognizer:longPressGesture];

}

}

  • (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer

{

UIView *view = [gestureRecognizer view]; // 這個(gè)view是手勢(shì)所屬的view刚夺,也就是增加手勢(shì)的那個(gè)view



switch (gestureRecognizer.state) {

    case UIGestureRecognizerStateEnded:{ // UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded

        NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");

        break;

    }

    case UIGestureRecognizerStateBegan:{ // 

        NSLog(@"======UIGestureRecognizerStateBegan");

        break;

    }

    case UIGestureRecognizerStateChanged:{ // 

        NSLog(@"======UIGestureRecognizerStateChanged");

        break;

    }

    case UIGestureRecognizerStateCancelled:{ // 

        NSLog(@"======UIGestureRecognizerStateCancelled");

        break;

    }

    case UIGestureRecognizerStateFailed:{ // 

        NSLog(@"======UIGestureRecognizerStateFailed");

        break;

    }

    case UIGestureRecognizerStatePossible:{ // 

        NSLog(@"======UIGestureRecognizerStatePossible");

        break;

    }

    default:{

        NSLog(@"======Unknow gestureRecognizer");

        break;

    }

}  

}

// 詢問一個(gè)手勢(shì)接收者是否應(yīng)該開始解釋執(zhí)行一個(gè)觸摸接收事件

  • (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

    CGPoint currentPoint = [gestureRecognizer locationInView:self.view];

    if (CGRectContainsPoint(CGRectMake(0, 0, 100, 100), currentPoint) ) {

      return YES;
    

    }

return NO;

}

// 詢問delegate献丑,兩個(gè)手勢(shì)是否同時(shí)接收消息末捣,返回YES同事接收侠姑。返回NO,不同是接收(如果另外一個(gè)手勢(shì)返回YES箩做,則并不能保證不同時(shí)接收消息)the default implementation returns NO莽红。

// 這個(gè)函數(shù)一般在一個(gè)手勢(shì)接收者要阻止另外一個(gè)手勢(shì)接收自己的消息的時(shí)候調(diào)用

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

    return NO;

}

// 詢問delegate是否允許手勢(shì)接收者接收一個(gè)touch對(duì)象

// 返回YES,則允許對(duì)這個(gè)touch對(duì)象審核,NO安吁,則不允許醉蚁。

// 這個(gè)方法在touchesBegan:withEvent:之前調(diào)用,為一個(gè)新的touch對(duì)象進(jìn)行調(diào)用

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

    return YES;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鬼店,一起剝皮案震驚了整個(gè)濱河市网棍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妇智,老刑警劉巖滥玷,帶你破解...
    沈念sama閱讀 212,185評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巍棱,居然都是意外死亡惑畴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門航徙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來如贷,“玉大人,你說我怎么就攤上這事到踏「芨ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 157,684評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵窝稿,是天一觀的道長(zhǎng)霞掺。 經(jīng)常有香客問我,道長(zhǎng)讹躯,這世上最難降的妖魔是什么菩彬? 我笑而不...
    開封第一講書人閱讀 56,564評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮潮梯,結(jié)果婚禮上骗灶,老公的妹妹穿的比我還像新娘。我一直安慰自己秉馏,他們只是感情好耙旦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萝究,像睡著了一般免都。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帆竹,一...
    開封第一講書人閱讀 49,874評(píng)論 1 290
  • 那天绕娘,我揣著相機(jī)與錄音,去河邊找鬼栽连。 笑死险领,一個(gè)胖子當(dāng)著我的面吹牛侨舆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绢陌,決...
    沈念sama閱讀 39,025評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼挨下,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了脐湾?” 一聲冷哼從身側(cè)響起臭笆,我...
    開封第一講書人閱讀 37,761評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秤掌,沒想到半個(gè)月后耗啦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,217評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡机杜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評(píng)論 2 327
  • 正文 我和宋清朗相戀三年帜讲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椒拗。...
    茶點(diǎn)故事閱讀 38,694評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡似将,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚀苛,到底是詐尸還是另有隱情在验,我是刑警寧澤,帶...
    沈念sama閱讀 34,351評(píng)論 4 332
  • 正文 年R本政府宣布堵未,位于F島的核電站腋舌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏渗蟹。R本人自食惡果不足惜块饺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雌芽。 院中可真熱鬧授艰,春花似錦、人聲如沸世落。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,778評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)屉佳。三九已至谷朝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間武花,已是汗流浹背圆凰。 一陣腳步聲響...
    開封第一講書人閱讀 32,007評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留髓堪,地道東北人送朱。 一個(gè)月前我還...
    沈念sama閱讀 46,427評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像干旁,于是被迫代替她去往敵國(guó)和親驶沼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評(píng)論 2 349

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