自定義轉(zhuǎn)場(chǎng)

效果圖 Gif.gif

設(shè)備支持的翻轉(zhuǎn)有哪些 , 程序在設(shè)備左轉(zhuǎn)再左轉(zhuǎn)之后打印出的日志是程序方向不變 , 即:設(shè)備倒向 , 程序不是倒向反而還是左向;
transitioningDelegate:告訴系統(tǒng)我的轉(zhuǎn)場(chǎng)動(dòng)畫要自定義而不是默認(rèn);
UIViewControllerAnimatedTransitioning:兩個(gè)代理方法:
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext

AppDelegate

#import "AppDelegate.h"
#import "TestViewController.h"
#import "CustomNavigationControllerDelegate.h"

@interface AppDelegate ()
{
    CustomNavigationControllerDelegate *_customNavigationDelegate;
}
@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    TestViewController *testVC = [[TestViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:testVC];
    _customNavigationDelegate = [[CustomNavigationControllerDelegate alloc] init];
    nav.delegate = _customNavigationDelegate;
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    return YES;
    
}

@end

TestViewController.m

#import "TestViewController.h"
#import "TestSecondViewController.h"
#import "PresentAnimation.h"
#import "DismissAnimation.h"


@interface TestViewController () <UIViewControllerTransitioningDelegate , TestSecondViewControllerDelegate>
{
    UIButton *_button;
    UITextField *_textField;
    PresentAnimation *_presentAnimation;
    DismissAnimation *_dismissAnimation;
    
    UIButton *_pushButton;
}

@end

@implementation TestViewController


/**
 *  設(shè)備支持的翻轉(zhuǎn)有哪些 , 程序在設(shè)備左轉(zhuǎn)再左轉(zhuǎn)之后打印出的日志是程序方向不變 , 即:設(shè)備倒向 , 程序不是倒向反而還是左向;
 
 */
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    //默認(rèn)的是:UIInterfaceOrientationMaskAllButUpsideDown , 所以在屏幕倒向的時(shí)候程序仍然是左向;
    
    NSUInteger mask = [super supportedInterfaceOrientations];
    if (mask == UIInterfaceOrientationMaskAll) {
        NSLog(@"mask all");
    } else if (mask == UIInterfaceOrientationMaskAllButUpsideDown) {
        NSLog(@"mask all but upsidedown");
    }
    //支持全部方向:
    return UIInterfaceOrientationMaskAll;
    
}


#pragma mark - 防止設(shè)備旋轉(zhuǎn)的過程中狀態(tài)欄消失
- (BOOL)prefersStatusBarHidden {
    return NO;
}

#pragma mark - init
- (instancetype)init
{
    self = [super init];
    if (self) {
        //UIDeviceOrientationDidChangeNotification通知:
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
        //UIApplicationDidChangeStatusBarOrientationNotification通知:
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarOrientationChanged:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
        //鍵盤變換通知:
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
        _presentAnimation = [[PresentAnimation alloc] init];
        _dismissAnimation = [[DismissAnimation alloc] init];
    }
    return self;
}

#pragma mark - 生命周期
- (void)viewDidLoad {
    [super viewDidLoad];
    
    _button = [[UIButton alloc] init];
    [_button setBackgroundColor:[UIColor orangeColor]];
    _button.frame = CGRectMake(100, 100, 150, 50);
    [_button setTitle:@"Present Button" forState:UIControlStateNormal];
    [_button addTarget:self action:@selector(presentButtonClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_button];
    
    
    _pushButton = [[UIButton alloc] init];
    [_pushButton setBackgroundColor:[UIColor orangeColor]];
    _pushButton.frame = CGRectMake(100, 200, 150, 50);
    [_pushButton setTitle:@"Push Button" forState:UIControlStateNormal];
    [_pushButton addTarget:self action:@selector(pushButtonClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_pushButton];
    
    
    
    _textField = [[UITextField alloc] init];
    _textField.backgroundColor = [UIColor lightGrayColor];
    [_textField setText:@"text"];
    _textField.frame = CGRectMake(100, 300, 200, 30);
    [self.view addSubview:_textField];
}


#pragma mark - PUSH & POP 視圖
- (void)pushButtonClick:(id)sender {
    //initWithFromPush:方法:
    TestSecondViewController *testSecondVC = [[TestSecondViewController alloc] initWithFromPush:YES];
    [self.navigationController pushViewController:testSecondVC animated:YES];
}


#pragma mark - 模態(tài)視圖
- (void)presentButtonClick:(id)sender {
    TestSecondViewController *modalVC = [[TestSecondViewController alloc] init];
    modalVC.delegate = self;
    //三要素:
    //1.告訴系統(tǒng)我的轉(zhuǎn)場(chǎng)動(dòng)畫要自定義而不是默認(rèn):
    modalVC.transitioningDelegate = self;
    //這個(gè)style控制著模態(tài)視圖跳轉(zhuǎn)到新視圖后原來視圖的內(nèi)容是否保留的操作:默認(rèn) UIModalPresentationFullScreen 不保留 , 在這里選擇 UIModalPresentationCustom 可以保留:
    modalVC.modalPresentationStyle = UIModalPresentationCustom;
    [self presentViewController:modalVC animated:YES completion:nil];
}



#pragma mark - <TestSecondViewControllerDelegate>
- (void)testSecondViewControllerDidDismiss:(TestSecondViewController *)testSecondViewController {
    [self dismissViewControllerAnimated:YES completion:nil];
}


#pragma mark - <UIViewControllerTransitioningDelegate>
//自定義轉(zhuǎn)場(chǎng)代理方法:
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source
{
    //因?yàn)榉祷刂凳?id<UIViewControllerAnimatedTransitioning> 所以我要?jiǎng)?chuàng)建object對(duì)象去實(shí)現(xiàn) UIViewControllerAnimatedTransitioning 即可!
    
    if ([presented isKindOfClass:[TestSecondViewController class]]) {
        return _presentAnimation;
    }
    return nil;
    
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
    if ([dismissed isKindOfClass:[TestViewController class]]) {
        return _dismissAnimation;
    }
    return nil;
    
}


#pragma mark - <UIDeviceOrientationDidChangeNotification>
- (void)deviceOrientationChanged:(NSNotification *)noti {
    NSLog(@"#1 receive device orientation changed notification");
    NSLog(@"%@", [self descriptionForDeviceOrientation:[UIDevice currentDevice].orientation]);
    NSLog(@"********************************************************************");
    NSLog(@"%@", [self descriptionForInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation]);
}

- (NSString *)descriptionForDeviceOrientation:(UIDeviceOrientation)deviceOrientation {
    switch (deviceOrientation) {
        case UIDeviceOrientationLandscapeLeft:
            return @"設(shè)備左向";
            break;
        case UIDeviceOrientationLandscapeRight:
            return @"設(shè)備右向";
            break;
        case UIDeviceOrientationPortraitUpsideDown:
            return @"設(shè)備倒向";
            break;
        case UIDeviceOrientationPortrait:
            return @"設(shè)備正向";
            break;
        default:
            break;
    }
    return @"其他方向";
    
}


- (NSString *)descriptionForInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    switch (interfaceOrientation) {
        case UIInterfaceOrientationLandscapeLeft:
            return @"程序左向";
            break;
        case UIInterfaceOrientationLandscapeRight:
            return @"程序右向";
            break;
        case UIInterfaceOrientationPortraitUpsideDown:
            return @"程序倒向";
            break;
        case UIInterfaceOrientationPortrait:
            return @"程序正向";
            break;
        default:
            break;
    }
    return @"其他方向";
    
}




#pragma mark - <statusBarOrientationChanged>
- (void)statusBarOrientationChanged:(NSNotification *)noti {
    NSLog(@"#2 receive interface orientation change");
    NSLog(@"%@", [self descriptionForDeviceOrientation:[UIDevice currentDevice].orientation]);
    NSLog(@"%@", [self descriptionForInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation]);
}


/**
 *  橫屏 UI 布局 與 豎屏的 UI 布局不同,如何來做?!
 *  在屏幕發(fā)生旋轉(zhuǎn)的時(shí)候重新進(jìn)行l(wèi)ayout布局即可! , 調(diào)用 viewWillTransitionToSize:方法;
 */
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        //正在旋轉(zhuǎn)中...
        
    } completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        //旋轉(zhuǎn)完成!
        NSLog(@"screen bounds = %@" , NSStringFromCGRect([UIScreen mainScreen].bounds));
    }];
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}


//屏幕旋轉(zhuǎn)的過渡動(dòng)畫不夠流暢 , 此時(shí)應(yīng)該把 MainInterface 中的內(nèi) Main 刪除即可!
- (void)viewDidLayoutSubviews {
    if (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation)) {
        _button.frame = CGRectMake(100, 100, 150, 50);
        _pushButton.frame = CGRectMake(100, 200, 150, 50);
        _textField.frame = CGRectMake(100, 300, 200, 30);
    } else {
        _button.frame = CGRectMake(100, 100, 150, 50);
        _pushButton.frame = CGRectMake(100, 200, 150, 50);
        _textField.frame = CGRectMake(300, 100, 200, 30);
    }
}


#pragma mark - 鍵盤變換通知
- (void)keyboardDidShow:(NSNotification *)noti {
    //NSLog(@"keyboard show, user info %@", notification.userInfo);
    NSLog(@"keyboard show user info %@" , noti.userInfo);
}


/**
 *  強(qiáng)制橫屏方法用transform:view.transform = CGAffineTransformMakeRotation(M_PI_2);
 *  但是用transform方法旋轉(zhuǎn)的話需要進(jìn)行隱藏statusBar操作 , 因?yàn)閟tatusBar不會(huì)根據(jù)屏幕跟隨旋轉(zhuǎn)!
 *  UIDevice.orientation方法:
 *  NSNumber *number = [NSNumber numberWithInteger:UIDeviceOrientationPortrait];
 [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
 
 */

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
}

@end

TestSecondViewController.h

#import <UIKit/UIKit.h>
@class TestSecondViewController;

@protocol TestSecondViewControllerDelegate <NSObject>

- (void)testSecondViewControllerDidDismiss:(TestSecondViewController *)testSecondViewController;

@end

@interface TestSecondViewController : UIViewController

@property (nonatomic, weak) id<TestSecondViewControllerDelegate> delegate;

- (instancetype)initWithFromPush:(BOOL)fromPush;

@end

TestSecondViewController.m

#import "TestSecondViewController.h"

@interface TestSecondViewController ()
{
    UIButton *_button;
    BOOL _fromPush;
}
@end

@implementation TestSecondViewController


#pragma mark - init
- (instancetype)initWithFromPush:(BOOL)fromPush {
    self = [super init];
    if (self) {
        //在構(gòu)造方法里記錄一下,傳進(jìn)來的這個(gè)布爾值:
        _fromPush = fromPush;
    }
    return self;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor lightGrayColor];
    _button = [[UIButton alloc] init];
    _button.backgroundColor = [UIColor redColor];
    _button.frame = CGRectMake(100, 100, 150, 50);
    
    if (_fromPush) {
        [_button setTitle:@"Pop" forState:UIControlStateNormal];
    } else {
        [_button setTitle:@"Dismiss" forState:UIControlStateNormal];
    }
    [_button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_button];
    
}


#pragma mark - 按鈕點(diǎn)擊事件
- (void)buttonClicked:(id)sender {
    if (_fromPush) {
        [self.navigationController popViewControllerAnimated:YES];
    } else {
        if (_delegate && [_delegate respondsToSelector:@selector(testSecondViewControllerDidDismiss:)]) {
            [_delegate testSecondViewControllerDidDismiss:self];
        }
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
}

@end

PresentAnimation.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>


@interface PresentAnimation : NSObject <UIViewControllerAnimatedTransitioning>

@end

PresentAnimation.m

#import "PresentAnimation.h"

@implementation PresentAnimation


#pragma mark - <UIViewControllerAnimatedTransitioning>
/**
 *  動(dòng)畫時(shí)長(zhǎng):
 */
- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext
{
    return 1.0f;
}

/**
 *  動(dòng)畫效果:
 */
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
    //viewControllerKey:
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    //viewKey:
    UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
    
    UIView *containerView = [transitionContext containerView];
    [containerView addSubview:toView];
    CGRect targetFrame = [transitionContext finalFrameForViewController:toVC];
    //偏移量的操作:
    //targetFrame = CGRectOffset(targetFrame, 0, 500);
    toView.frame = CGRectOffset(targetFrame, 0, -targetFrame.size.height);
    NSTimeInterval duration = [self transitionDuration:transitionContext];
    [UIView animateWithDuration:duration delay:0 usingSpringWithDamping:0.6 initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
        
        toView.frame = targetFrame;
        
    } completion:^(BOOL finished) {
        //過場(chǎng)動(dòng)畫完成:
        [transitionContext completeTransition:YES];
        
    }];
    
}

@end

DismissAnimation.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface DismissAnimation : NSObject <UIViewControllerAnimatedTransitioning>

@end

DismissAnimation.m

#import "DismissAnimation.h"

@implementation DismissAnimation

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
{
    return 1;
}

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
    
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey];
    
    UIView *containerView = [transitionContext containerView];
    [containerView addSubview:toView];
    [containerView sendSubviewToBack:toView];
    
    CGRect initFrame = [transitionContext initialFrameForViewController:fromVC];
    CGRect targetFrame = CGRectOffset(initFrame, 0, - initFrame.size.height);
    
    NSTimeInterval duration = [self transitionDuration:transitionContext];
    
    [UIView animateWithDuration:duration animations:^{
        
        fromView.frame = targetFrame;
        
    } completion:^(BOOL finished) {
        
        [transitionContext completeTransition:YES];
    }];
}

@end

CustomNavigationControllerDelegate.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface CustomNavigationControllerDelegate : NSObject <UINavigationControllerDelegate>

@property (nonatomic, weak) UINavigationController *navigationController;

@end

CustomNavigationControllerDelegate.m

#import "CustomNavigationControllerDelegate.h"
#import "TransformAnimation.h"
#import "PresentAnimation.h"

@interface CustomNavigationControllerDelegate ()

{
    UIPercentDrivenInteractiveTransition *_innerPercentTransition;
    
    BOOL _underInteracting;
}

@end

@implementation CustomNavigationControllerDelegate

- (nullable id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                            animationControllerForOperation:(UINavigationControllerOperation)operation
                                                         fromViewController:(UIViewController *)fromVC
                                                           toViewController:(UIViewController *)toVC  NS_AVAILABLE_IOS(7_0)
{
    if (operation == UINavigationControllerOperationPop)
    {
        return [[TransformAnimation alloc] init];
    } else if (UINavigationControllerOperationPush)
    {
        return [[PresentAnimation alloc] init];
    }
    return nil;
}


#pragma mark - 交互式轉(zhuǎn)場(chǎng)
- (nullable id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController
                                   interactionControllerForAnimationController:(id <UIViewControllerAnimatedTransitioning>) animationController
{
    if (_underInteracting)
    {
        return _innerPercentTransition;
    }
    
    return nil;
}

//setter方法:
- (void)setNavigationController:(UINavigationController *)navigationController
{
    _navigationController = navigationController;
    
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    [_navigationController.view addGestureRecognizer:panGesture];
}


#pragma mark - 手勢(shì)
- (void)pan:(id)sender
{
    if ([sender isKindOfClass:[UIPanGestureRecognizer class]])
    {
        UIPanGestureRecognizer *panGesture = sender;
        
        switch (panGesture.state) {
            case UIGestureRecognizerStateBegan:
            {
                _underInteracting = YES;
                
                _innerPercentTransition = [[UIPercentDrivenInteractiveTransition alloc] init];
                
                if ([_navigationController.viewControllers count] > 1)
                {
                    [_navigationController popViewControllerAnimated:YES];
                }
                break;
            }
                
            case UIGestureRecognizerStateChanged:
            {
                CGPoint translationPoint = [panGesture translationInView:_navigationController.view];
                CGFloat progress = translationPoint.x / CGRectGetWidth(_navigationController.view.bounds);
                
                [_innerPercentTransition updateInteractiveTransition:progress];
                
                
                break;
            }
            case UIGestureRecognizerStateEnded:
            {
                _underInteracting = NO;
                
                if ([panGesture velocityInView:_navigationController.view].x > 0) {
                    [_innerPercentTransition finishInteractiveTransition];
                }
                else
                {
                    [_innerPercentTransition cancelInteractiveTransition];
                }
                _innerPercentTransition = nil;
                break;
            }
                
            default:
                [_innerPercentTransition cancelInteractiveTransition];
                _innerPercentTransition = nil;
                break;
        }
    }
}

@end

TransformAnimation.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface TransformAnimation : NSObject <UIViewControllerAnimatedTransitioning>

@end

TransformAnimation.m

#import "TransformAnimation.h"

@implementation TransformAnimation

- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext
{
    return 1.0f;
}

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    [[transitionContext containerView] addSubview:toVC.view];
    toVC.view.alpha = 0;
    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
        fromVC.view.transform = CGAffineTransformMakeScale(0.1, 0.1);
        toVC.view.alpha = 1;
    } completion:^(BOOL finished) {
        //還原fromVC:
        fromVC.view.transform = CGAffineTransformIdentity;
        //動(dòng)畫結(jié)束后,完成上下文:
        [transitionContext completeTransition:YES]; 
    }];
}

@end

愿編程讓這個(gè)世界更美好

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖窑眯,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異识藤,居然都是意外死亡搭盾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門痒钝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秉颗,“玉大人,你說我怎么就攤上這事送矩〔仙” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵栋荸,是天一觀的道長(zhǎng)菇怀。 經(jīng)常有香客問我,道長(zhǎng)晌块,這世上最難降的妖魔是什么爱沟? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮匆背,結(jié)果婚禮上呼伸,老公的妹妹穿的比我還像新娘。我一直安慰自己钝尸,他們只是感情好括享,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布搂根。 她就那樣靜靜地躺著,像睡著了一般铃辖。 火紅的嫁衣襯著肌膚如雪剩愧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天娇斩,我揣著相機(jī)與錄音隙咸,去河邊找鬼。 笑死成洗,一個(gè)胖子當(dāng)著我的面吹牛五督,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓶殃,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼充包,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼椎椰!你這毒婦竟也來了骏融?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤笋轨,失蹤者是張志新(化名)和其女友劉穎冠场,沒想到半個(gè)月后家浇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碴裙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年钢悲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舔株。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莺琳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出载慈,到底是詐尸還是另有隱情惭等,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布办铡,位于F島的核電站辞做,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寡具。R本人自食惡果不足惜秤茅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晒杈。 院中可真熱鬧嫂伞,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拼余,卻和暖如春污桦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匙监。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工凡橱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亭姥。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓稼钩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親达罗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坝撑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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