iOS使用動(dòng)畫構(gòu)建海底世界

效果如圖:


魚的最大數(shù)量可控制跪帝,運(yùn)動(dòng)速度隨機(jī),大小隨機(jī)些阅,擺尾速度隨機(jī),運(yùn)動(dòng)軌跡隨機(jī)斑唬,氣泡個(gè)數(shù)隨機(jī)市埋,氣泡位置隨機(jī),出現(xiàn)時(shí)間隨機(jī)恕刘。

參考文章:波浪效果
     幀動(dòng)畫與UIView動(dòng)畫
     氣泡

1.先寫一個(gè)波浪效果:TBMyInfoTopView.swift


import UIKit
class TBMyInfoTopView: UIView {
    
    //提供給外部調(diào)用接口
    
    ///曲線振幅
    var waterAmplitude: CGFloat = 8
    ///曲線角速度
    var waterPalstance: CGFloat = 0
    ///曲線初相
    var waterX: CGFloat = 0
    ///曲線偏距
    let waterY: CGFloat = 100
    ///曲線移動(dòng)速度
    var waterMoveSpeed: CGFloat = 0
    
    //內(nèi)部接口

    fileprivate let waterColor = UIColor(red: 118/255.0, green: 165/255.0, blue: 242/255.0, alpha: 0.6)
    fileprivate let BackGroundColor = UIColor(red: 80/255.0, green: 140/255.0, blue: 238/255.0, alpha: 1)
    //前面的波浪
    fileprivate let waterLayer1 = CAShapeLayer()
    fileprivate let waterLayer2 = CAShapeLayer()
    fileprivate var disPlayLink = CADisplayLink()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = BackGroundColor
        buildInterface()
        buildData()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func buildInterface(){
        //初始化波浪
        waterLayer1.fillColor = waterColor.cgColor
        waterLayer1.strokeColor = waterColor.cgColor
        waterLayer1.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        
        waterLayer2.fillColor = waterColor.cgColor
        waterLayer2.strokeColor = waterColor.cgColor
        waterLayer2.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        
        layer.addSublayer(waterLayer1)
        layer.addSublayer(waterLayer2)
    }
    
    ///初始化數(shù)據(jù)
    func buildData(){
        waterPalstance = CGFloat(Double.pi) / bounds.size.width
        waterMoveSpeed = 5 * waterPalstance
        //以屏幕刷新速度為周期刷新曲線的位置
        disPlayLink = CADisplayLink(target: self, selector: #selector(self.updatewater(link:)))
        disPlayLink.add(to: RunLoop.main, forMode: .commonModes)
    }
    
    func updatewater(link: CADisplayLink){
        //更新x
        waterX += waterMoveSpeed
        updatewater(shapLayer: waterLayer1, isSin: false)
        updatewater(shapLayer: waterLayer2, isSin: true)
    }
    
    func updatewater(shapLayer: CAShapeLayer, isSin: Bool){
        //波浪寬度
        let waterwaterWidth = bounds.size.width
        //初始化運(yùn)動(dòng)路徑
        let path = CGMutablePath()
        //設(shè)置起始位置
        path.move(to: CGPoint(x: 0, y: waterY))
        //初始化波浪,y為偏距
        var tempY = waterY
        //正弦曲線公式為: y=Asin(ωx+φ)+k
        for x in 0..<Int(waterwaterWidth){
            tempY = isSin ? waterAmplitude * sin(waterPalstance * CGFloat(x) + waterX) + waterY : waterAmplitude * cos(waterPalstance * CGFloat(x) + waterX) + waterY
            path.addLine(to: CGPoint(x: CGFloat(x), y: tempY))
        }
        //填充底部顏色
        path.addLine(to: CGPoint(x: waterwaterWidth, y: 200))
        path.addLine(to: CGPoint(x: 0, y: 200))
        path.closeSubpath()
        shapLayer.path = path
    }
}

使用方法

2.加上旋轉(zhuǎn)的陽(yáng)光

更改上面的代碼缤谎,更改后如下:

import UIKit

class TBMyInfoTopView: UIView {
    
    //提供給外部調(diào)用接口
    
    ///曲線振幅
    var waterAmplitude: CGFloat = 8
    ///曲線角速度
    var waterPalstance: CGFloat = 0
    ///曲線初相
    var waterX: CGFloat = 0
    ///曲線偏距
    let waterY: CGFloat = 70
    ///曲線移動(dòng)速度
    var waterMoveSpeed: CGFloat = 0

    fileprivate let waterColor = UIColor(red: 118/255.0, green: 165/255.0, blue: 242/255.0, alpha: 0.6)
    fileprivate let BackGroundColor = UIColor(red: 80/255.0, green: 140/255.0, blue: 238/255.0, alpha: 1)
    //前面的波浪
    fileprivate let waterLayer1 = CAShapeLayer()
    fileprivate let waterLayer2 = CAShapeLayer()
    fileprivate var disPlayLink = CADisplayLink()
    
    //陽(yáng)光
    var sunshinView = UIImageView()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = BackGroundColor
        buildInterface()
        buildData()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func buildInterface(){
        //初始化波浪
        waterLayer1.fillColor = waterColor.cgColor
        waterLayer1.strokeColor = waterColor.cgColor
        waterLayer1.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        
        waterLayer2.fillColor = waterColor.cgColor
        waterLayer2.strokeColor = waterColor.cgColor
        waterLayer2.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        
        layer.addSublayer(waterLayer1)
        layer.addSublayer(waterLayer2)
        
        //陽(yáng)光
        sunshinView = UIImageView(frame: CGRect(x: 200, y: -100, width: 200, height: 200))
        sunshinView.image = #imageLiteral(resourceName: "gx.png")
        addSubview(sunshinView)
        // 創(chuàng)建動(dòng)畫
        let anim = CABasicAnimation(keyPath: "transform.rotation")
        // 設(shè)置動(dòng)畫屬性
        anim.toValue = 2 * Double.pi
        anim.repeatCount = MAXFLOAT
        anim.duration = 20
        anim.isRemovedOnCompletion = false
        // 將動(dòng)畫添加到圖層上
        sunshinView.layer.add(anim, forKey: nil)
    }
    
    ///初始化數(shù)據(jù)
    func buildData(){
        waterPalstance = CGFloat(Double.pi) / bounds.size.width
        waterMoveSpeed = 5 * waterPalstance
        //以屏幕刷新速度為周期刷新曲線的位置
        disPlayLink = CADisplayLink(target: self, selector: #selector(self.updatewater(link:)))
        disPlayLink.add(to: RunLoop.main, forMode: .commonModes)
    }
    
    func updatewater(link: CADisplayLink){
        //更新x
        waterX += waterMoveSpeed
        updatewater(shapLayer: waterLayer1, isSin: false)
        updatewater(shapLayer: waterLayer2, isSin: true)
    }
    
    func updatewater(shapLayer: CAShapeLayer, isSin: Bool){
        //波浪寬度
        let waterwaterWidth = bounds.size.width
        //初始化運(yùn)動(dòng)路徑
        let path = CGMutablePath()
        //設(shè)置起始位置
        path.move(to: CGPoint(x: 0, y: waterY))
        //初始化波浪,y為偏距
        var tempY = waterY
        //正弦曲線公式為: y=Asin(ωx+φ)+k
        for x in 0..<Int(waterwaterWidth){
            tempY = isSin ? waterAmplitude * sin(waterPalstance * CGFloat(x) + waterX) + waterY : waterAmplitude * cos(waterPalstance * CGFloat(x) + waterX) + waterY
            path.addLine(to: CGPoint(x: CGFloat(x), y: tempY))
        }
        //填充底部顏色
        path.addLine(to: CGPoint(x: waterwaterWidth, y: 200))
        path.addLine(to: CGPoint(x: 0, y: 200))
        path.closeSubpath()
        shapLayer.path = path
    }
    
}

3.用幀動(dòng)畫創(chuàng)建游動(dòng)的魚群FishView.swift

值得注意的是下面這部分代碼當(dāng)時(shí)遇到一點(diǎn)小坑


arc4random() % UInt32(x)中x必須大于1,而abs(frame.height - 35)之類的結(jié)果是有可能小于1的褐着,所以需要做相應(yīng)處理坷澡,不能直接arc4random() % UInt32(abs(frame.height - 35))

import UIKit

class FishView: UIView {
    
    var fishMaxNum = 5

    fileprivate var imageViewArray = [UIImageView]()
    fileprivate var timer: Timer!
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        for _ in 0..<fishMaxNum{
            let tempX = abs(frame.width - 60)
            let x = arc4random() % UInt32(tempX >= 1 ? tempX : 1)
            let tempY = abs(frame.height - 35)
            let y = arc4random() % UInt32(tempY >= 1 ? tempY : 1)
            let w = arc4random() % 50 + 10
            let h = arc4random() % 30 + 5
            let imageView = UIImageView(frame: CGRect(x: CGFloat(x), y: CGFloat(y), width: CGFloat(w), height: CGFloat(h)))
            addSubview(imageView)
            imageViewArray.append(imageView)
        }
        
        self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.timerAction(timer:)), userInfo: nil, repeats: true)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func timerAction(timer:Timer){
        let count = imageViewArray.count
        //隨機(jī)要?jiǎng)拥聂~數(shù)量
        let num = arc4random() % UInt32(count)
        for _ in 0..<num{
            //隨機(jī)數(shù)組中哪幾個(gè)動(dòng)
            let num2 = arc4random() % UInt32(count)
            changeFrame(imageView: imageViewArray[Int(num2)])
        }
        
        timer.invalidate()
        self.timer = Timer.scheduledTimer(timeInterval: TimeInterval(arc4random() % 5 + 1), target: self, selector: #selector(self.timerAction(timer:)), userInfo: nil, repeats: true)
    }
    
    func changeFrame(imageView: UIImageView){
        let tempX = CGFloat(arc4random() % 100) - 50
        let tempY = CGFloat(arc4random() % 100) - 50
        let frameOr = imageView.frame.origin
        if tempX + frameOr.x > 0 && tempX + frameOr.x < frame.width - imageView.frame.width{
            imageView.stopAnimating()
            if tempX + frameOr.x > imageView.frame.origin.x{
                animation(isLeft: false, imageView: imageView)
            }else{
                animation(isLeft: true, imageView: imageView)
            }
            UIView.animate(withDuration: TimeInterval(arc4random() % 5 + 1), animations: {
                imageView.frame.origin.x += tempX
            })
        }
        if tempY + frameOr.y > 0 && tempY + frameOr.y < frame.height - imageView.frame.height{
            UIView.animate(withDuration: TimeInterval(arc4random() % 5 + 1), animations: {
                imageView.frame.origin.y += tempY
            })
        }
    }
    
    func animation(isLeft: Bool, imageView: UIImageView){
        imageView.animationImages = []
        for item in 0...9{
            let imageName = isLeft ? "fishl\(item).png" : "fish\(item).png"
            let image = UIImage(named: imageName)
            imageView.animationImages?.append(image!)
            
        }
        imageView.animationDuration = Double((arc4random() % 20) + 5) / 10.0
        imageView.startAnimating()
    }

}

使用


組合到上面的代碼中需要將背景色改變成透明

4.氣泡

氣泡搬了個(gè)磚,然后稍作修改含蓉,代碼是OC寫的频敛,如下
TBBubbleView.h

#import <UIKit/UIKit.h>

@interface TBBubbleView : UIView

@property (nonatomic, assign)CGFloat maxLeft;//漂浮左邊最大距離
@property (nonatomic, assign)CGFloat maxRight;//漂浮右邊最大距離
@property (nonatomic, assign)CGFloat maxHeight;//漂浮最高距離
@property (nonatomic, assign)CGFloat duration;//一組圖片播放完的時(shí)間
@property (nonatomic, copy)NSArray *images;//圖片數(shù)組


//init
-(instancetype)initWithFrame:(CGRect)frame
                folatMaxLeft:(CGFloat)maxLeft
               folatMaxRight:(CGFloat)maxRight
              folatMaxHeight:(CGFloat)maxHeight
                bubbleNum:(NSInteger)bubbleNum;

//開(kāi)始動(dòng)畫
-(void)startBubble;

@end

TBBubbleView.m

#import "TBBubbleView.h"

@interface TBBubbleView()
@property(nonatomic,strong)NSTimer *timer;

@property(nonatomic,assign)CGFloat maxWidth;

@property(nonatomic,assign)CGPoint startPoint;

@property(nonatomic,strong) NSMutableArray *layerArray;

@property(nonatomic) NSUInteger bubbleNum;

@property(nonatomic) NSInteger tempNum;

@end


@implementation TBBubbleView


//初始化
-(instancetype)initWithFrame:(CGRect)frame folatMaxLeft:(CGFloat)maxLeft folatMaxRight:(CGFloat)maxRight folatMaxHeight:(CGFloat)maxHeight bubbleNum:(NSInteger)bubbleNum
{
    self = [super initWithFrame:frame];
    if(self)
    {
        _maxLeft = maxLeft;
        _maxRight = maxRight;
        _maxHeight = maxHeight;
        _layerArray = [NSMutableArray array];
        _bubbleNum = bubbleNum;
        _tempNum = 0;
    }
    return self;
}
//外部方法 開(kāi)始?xì)馀?-(void)startBubble
{
    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(generateBubble) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:UITrackingRunLoopMode];
}

-(void)generateBubble
{
    if (_tempNum == _bubbleNum) {
        [self.timer invalidate];
        return;
    }
    CALayer *layer =[CALayer layer];;
    UIImage *image = self.images[arc4random() % self.images.count];
    
    layer = [self createLayerWithImage:image];
    [self.layer addSublayer:layer];
    [self generateBubbleByLayer:layer];
    _tempNum += 1;
}

//創(chuàng)建帶有Image的Layer
- (CALayer *)createLayerWithImage:(UIImage *)image
{
    CGFloat scale = [UIScreen mainScreen].scale;
    CALayer *layer = [CALayer layer];
    layer.frame    = CGRectMake(0, 0, image.size.width / scale, image.size.height / scale);
    layer.contents = (__bridge id)image.CGImage;
    return layer;
}


-(void)generateBubbleByLayer:(CALayer*)layer
{
    _maxWidth = _maxLeft + _maxRight;
    _startPoint = CGPointMake(self.frame.size.width/2, 0);
    
    CGPoint endPoint = CGPointMake(_maxWidth * [self randomFloat] - _maxLeft, -_maxHeight);
    
    CGPoint controlPoint1 =
    CGPointMake(_maxWidth * [self randomFloat] - _maxLeft, -_maxHeight * 0.2);
    CGPoint controlPoint2 =
    CGPointMake(_maxWidth * [self randomFloat] - _maxLeft, -_maxHeight * 0.6);
    
    CGMutablePathRef curvedPath = CGPathCreateMutable();
    CGPathMoveToPoint(curvedPath, NULL, _startPoint.x, _startPoint.y);
    CGPathAddCurveToPoint(curvedPath, NULL, controlPoint1.x, controlPoint1.y, controlPoint2.x, controlPoint2.y, endPoint.x, endPoint.y);
    UIBezierPath *path = [UIBezierPath bezierPathWithCGPath:curvedPath];
    //[path addCurveToPoint:endPoint controlPoint1:_startPoint controlPoint2:controlPoint1];
    
    CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animation];
    keyFrame.keyPath = @"position";
    keyFrame.path = path.CGPath;
    keyFrame.duration = self.duration;
    keyFrame.calculationMode = kCAAnimationPaced;
    
    [layer addAnimation:keyFrame forKey:@"keyframe"];
    
    
    CABasicAnimation *scale = [CABasicAnimation animation];
    scale.keyPath = @"transform.scale";
    scale.toValue = @1;
    scale.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 0.1)];
    scale.duration = 0.5;
    
    CABasicAnimation *alpha = [CABasicAnimation animation];
    alpha.keyPath = @"opacity";
    alpha.fromValue = @1;
    alpha.toValue = @0;
    alpha.duration = self.duration * 0.4;
    alpha.beginTime = self.duration - alpha.duration;
    
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.animations = @[keyFrame, scale, alpha];
    group.duration = self.duration;
    group.delegate = self;
    group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
    group.fillMode = kCAFillModeForwards;
    group.removedOnCompletion = NO;
    [layer addAnimation:group forKey:@"group"];
    
    [self.layerArray addObject:layer];
}
-(void)dealloc
{
    [self.layerArray removeAllObjects];
    [self.timer invalidate];
}

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    if (flag)
    {
        CALayer *layer = [self.layerArray firstObject];
        [layer removeAllAnimations];
        [layer removeFromSuperlayer];
        [self.layerArray removeObject:layer];
        if (self.layerArray.count == 0) {
            [self removeFromSuperview];
        }
    }
    
}
- (CGFloat)randomFloat{
    return (arc4random() % 100)/100.0f;
}

@end

使用

5.組合

組合后TBMyInfoTopView文件如下

import UIKit

class TBMyInfoTopView: UIView {
    
    //提供給外部調(diào)用接口
    
    ///曲線振幅
    var waterAmplitude: CGFloat = 8
    ///曲線角速度
    var waterPalstance: CGFloat = 0
    ///曲線初相
    var waterX: CGFloat = 0
    ///曲線偏距,越小距離頂端越近
    let waterY: CGFloat = 50
    ///曲線移動(dòng)速度
    var waterMoveSpeed: CGFloat = 0

    fileprivate let waterColor = UIColor(red: 118/255.0, green: 165/255.0, blue: 242/255.0, alpha: 0.3)
    fileprivate let BackGroundColor = UIColor(red: 80/255.0, green: 140/255.0, blue: 238/255.0, alpha: 1)
    //前面的波浪
    fileprivate let waterLayer1 = CAShapeLayer()
    fileprivate let waterLayer2 = CAShapeLayer()
    fileprivate var disPlayLink = CADisplayLink()
    
    //陽(yáng)光
    var sunshinView = UIImageView()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = BackGroundColor
        buildInterface()
        buildData()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func buildInterface(){
        
        //珊瑚
        let shImageView = UIImageView(frame: CGRect(x: frame.width - 60, y: frame.height - 60, width: 60, height: 60))
        shImageView.image = #imageLiteral(resourceName: "shanhu.png")
        addSubview(shImageView)
        let scImageView = UIImageView(frame: CGRect(x: 150, y: frame.height - 40, width: 40, height: 40))
        scImageView.image = #imageLiteral(resourceName: "shuicao.png")
        addSubview(scImageView)
        
        sendSubview(toBack: scImageView)
        
        //初始化波浪
        waterLayer1.fillColor = waterColor.cgColor
        waterLayer1.strokeColor = waterColor.cgColor
        waterLayer1.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        
        waterLayer2.fillColor = waterColor.cgColor
        waterLayer2.strokeColor = waterColor.cgColor
        waterLayer2.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        
        layer.addSublayer(waterLayer1)
        layer.addSublayer(waterLayer2)
        
        //陽(yáng)光
        sunshinView = UIImageView(frame: CGRect(x: 200, y: -100, width: 200, height: 200))
        sunshinView.image = #imageLiteral(resourceName: "gx.png")
        addSubview(sunshinView)
        // 創(chuàng)建動(dòng)畫
        let anim = CABasicAnimation(keyPath: "transform.rotation")
        // 設(shè)置動(dòng)畫屬性
        anim.toValue = 2 * Double.pi
        anim.repeatCount = MAXFLOAT
        anim.duration = 20
        anim.isRemovedOnCompletion = false
        // 將動(dòng)畫添加到圖層上
        sunshinView.layer.add(anim, forKey: nil)
        
        //魚群
        let fishView = FishView(frame: CGRect(x: 0, y: waterY + 10, width: frame.width, height: frame.height - waterY - 10))
        fishView.backgroundColor = UIColor.clear
        insertSubview(fishView, belowSubview: shImageView)
        Timer.scheduledTimer(timeInterval: TimeInterval(arc4random() % 10 + 5), target: self, selector: #selector(self.showBubble(timer:)), userInfo: nil, repeats: false)
    }
    
    ///初始化數(shù)據(jù)
    func buildData(){
        waterPalstance = CGFloat(Double.pi) / bounds.size.width
        waterMoveSpeed = 5 * waterPalstance
        //以屏幕刷新速度為周期刷新曲線的位置
        disPlayLink = CADisplayLink(target: self, selector: #selector(self.updatewater(link:)))
        disPlayLink.add(to: RunLoop.main, forMode: .commonModes)
    }
    
    func updatewater(link: CADisplayLink){
        //更新x
        waterX += waterMoveSpeed
        updatewater(shapLayer: waterLayer1, isSin: false)
        updatewater(shapLayer: waterLayer2, isSin: true)
    }
    
    func updatewater(shapLayer: CAShapeLayer, isSin: Bool){
        //波浪寬度
        let waterwaterWidth = bounds.size.width
        //初始化運(yùn)動(dòng)路徑
        let path = CGMutablePath()
        //設(shè)置起始位置
        path.move(to: CGPoint(x: 0, y: waterY))
        //初始化波浪,y為偏距
        var tempY = waterY
        //正弦曲線公式為: y=Asin(ωx+φ)+k
        for x in 0..<Int(waterwaterWidth){
            tempY = isSin ? waterAmplitude * sin(waterPalstance * CGFloat(x) + waterX) + waterY : waterAmplitude * cos(waterPalstance * CGFloat(x) + waterX) + waterY
            path.addLine(to: CGPoint(x: CGFloat(x), y: tempY))
        }
        //填充底部顏色
        path.addLine(to: CGPoint(x: waterwaterWidth, y: 200))
        path.addLine(to: CGPoint(x: 0, y: 200))
        path.closeSubpath()
        shapLayer.path = path
    }
    
    func showBubble(timer:Timer){
        
        //氣泡數(shù)量
        let num = arc4random() % 5
        //x坐標(biāo)
        let x = arc4random() % UInt32(frame.width)
        if let bubbleView = TBBubbleView(frame: CGRect(x: CGFloat(x), y: self.frame.height - 10, width: 0, height: 0), folatMaxLeft: 30, folatMaxRight: 30, folatMaxHeight: frame.height - waterY - 20, bubbleNum: Int(num)){
            insertSubview(bubbleView, at: 3)
            if let image = UIImage.init(named: "2"){
                bubbleView.images = [image]
            }
            bubbleView.duration = 4
            bubbleView.startBubble()
            
            timer.invalidate()
            Timer.scheduledTimer(timeInterval: TimeInterval(arc4random() % 10 + 5), target: self, selector: #selector(self.showBubble(timer:)), userInfo: nil, repeats: true)
        }
    }
    
}

Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市馅扣,隨后出現(xiàn)的幾起案子斟赚,更是在濱河造成了極大的恐慌,老刑警劉巖差油,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拗军,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蓄喇,警方通過(guò)查閱死者的電腦和手機(jī)发侵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妆偏,“玉大人刃鳄,你說(shuō)我怎么就攤上這事÷ゾ欤” “怎么了铲汪?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)罐柳。 經(jīng)常有香客問(wèn)我掌腰,道長(zhǎng),這世上最難降的妖魔是什么张吉? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任齿梁,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勺择。我一直安慰自己创南,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布省核。 她就那樣靜靜地躺著稿辙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪气忠。 梳的紋絲不亂的頭發(fā)上邻储,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音旧噪,去河邊找鬼吨娜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛淘钟,可吹牛的內(nèi)容都是我干的宦赠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼米母,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼勾扭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起爱咬,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尺借,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后精拟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體燎斩,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蜂绎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栅表。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡师枣,死狀恐怖怪瓶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情践美,我是刑警寧澤洗贰,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站陨倡,受9級(jí)特大地震影響敛滋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兴革,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一绎晃、第九天 我趴在偏房一處隱蔽的房頂上張望蜜唾。 院中可真熱鬧,春花似錦庶艾、人聲如沸袁余。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颖榜。三九已至,卻和暖如春述召,著一層夾襖步出監(jiān)牢的瞬間朱转,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工积暖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怪与。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓夺刑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親分别。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遍愿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件耘斩、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評(píng)論 4 62
  • 鄭潤(rùn)遠(yuǎn)小朋友榮獲淄博市 圍棋賽少兒組第一名沼填!
    張縣明閱讀 144評(píng)論 0 0
  • 夜明時(shí)分,閑來(lái)無(wú)事括授,遂一人閑庭信步坞笙,游于沙湖岸。心有所想荚虚,忽見(jiàn)天色驟變薛夜,不堪苦言。咦噓唏版述,忽記起早年間曾讀碟庵...
    可能會(huì)下雨閱讀 230評(píng)論 0 0
  • 音樂(lè)梯澜,是一種旋律,打著節(jié)拍的律動(dòng)渴析!有人喜歡傷感晚伙、有人喜歡歡快、有人喜歡DJ俭茧!不管是什么音樂(lè)咆疗,不管什么流派,既然這首...
    Jimmy隨筆閱讀 1,226評(píng)論 2 2