iOS 橫向滑動UIScrollView選擇器


一:在ViewController中實例化MLPickerScrollView完成代理<MLPickerScrollViewDataSource,MLPickerScrollViewDelegate>

////? ViewController.m//? OYRPickerDemo////? Created by 歐陽榮 on 17/3/30.//? Copyright ? 2017年 HengTaiXin. All rights reserved.//#import "ViewController.h"#import "MLPickerScrollView.h"#import "MLDemoItem.h"#import "MLDemoModel.h"#define kItemH 110#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)#define MLColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]#define kRGB236 MLColor(236, 73, 73, 1.0)@interface ViewController (){

MLPickerScrollView *_pickerScollView;

NSMutableArray *data;

UIButton *sureButton;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[self setUpUI];

// [self setUpSureButton];

}

#pragma mark - UI

- (void)setUpUI

{

// 1.數據源

data = [NSMutableArray array];

NSArray *titleArray = @[@"比桿賽",@"最近洞賽",@"推桿賽",@"比洞賽",@"三人斗地主",@"四人拉斯"];

NSArray *titleImageArray = @[@"img_stroke-play",@"img_putting",@"img_nearpin",@"img_match",@"img_three-landlords",@"img_four-lars"];

for (int i = 0; i < titleArray.count; i++) {

MLDemoModel *model = [[MLDemoModel alloc] init];

model.dicountTitle = [titleArray objectAtIndex:i];

model.dicountImageName = [titleImageArray objectAtIndex:i];

[data addObject:model];

}

// 2.初始化

_pickerScollView = [[MLPickerScrollView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT - 350, SCREEN_WIDTH, kItemH)];

//_pickerScollView.backgroundColor = [UIColor lightGrayColor];

_pickerScollView.itemWidth = _pickerScollView.frame.size.width / 5; //剛好顯示5個的寬度

_pickerScollView.itemHeight = kItemH;

_pickerScollView.firstItemX = (_pickerScollView.frame.size.width - _pickerScollView.itemWidth) * 0.5;

_pickerScollView.dataSource = self;

_pickerScollView.delegate = self;

[self.view addSubview:_pickerScollView];

// 3.刷新數據

[_pickerScollView reloadData];

// 4.滾動到對應折扣

self.discount = 2;//(NSInteger)arc4random()%10;

/*if (self.discount) {

NSInteger number = 0;

for (int i = 0; i < data.count; i++) {

MLDemoModel *model = [data objectAtIndex:i];

if (model.dicountIndex == self.discount) {

number = i;

}

}

*/

NSInteger number = _discount;

_pickerScollView.seletedIndex = number;

[_pickerScollView scollToSelectdIndex:number];

}

- (void)setUpSureButton

{

sureButton = [UIButton buttonWithType:UIButtonTypeCustom];

sureButton.frame = CGRectMake(15, SCREEN_HEIGHT - 200, SCREEN_WIDTH - 30, 44);

sureButton.backgroundColor = kRGB236;

sureButton.layer.cornerRadius = 22;

sureButton.layer.masksToBounds = YES;

[sureButton setTitle:@"確定" forState:UIControlStateNormal];

[sureButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

[sureButton addTarget:self action:@selector(clickSure) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:sureButton];

}

#pragma mark - Action

- (void)clickSure

{

NSLog(@"確定--選擇折扣Index為%ld",(long)_pickerScollView.seletedIndex);

NSString *title;

for (int i = 0; i < data.count; i++) {

MLDemoModel *model = [data objectAtIndex:i];

if (model.dicountIndex == _pickerScollView.seletedIndex) {

title = model.dicountTitle;

}

}

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:nil delegate:self cancelButtonTitle:@"確定" otherButtonTitles:@"取消", nil];

[alert show];

}

#pragma mark - dataSource

- (NSInteger)numberOfItemAtPickerScrollView:(MLPickerScrollView *)pickerScrollView

{

return data.count;

}

- (MLPickerItem *)pickerScrollView:(MLPickerScrollView *)pickerScrollView itemAtIndex:(NSInteger)index

{

// creat

MLDemoItem *item = [[MLDemoItem alloc] initWithFrame:CGRectMake(0, 0, pickerScrollView.itemWidth, pickerScrollView.itemHeight)];

// assignment

MLDemoModel *model = [data objectAtIndex:index];

model.dicountIndex = index;//標記數據模型上的index 取出來賦值也行

item.title = model.dicountTitle;

item.imageName = model.dicountImageName;

[item setGrayTitle];

// tap

item.PickerItemSelectBlock = ^(NSInteger d){

[_pickerScollView scollToSelectdIndex:d];

};

return item;

}

- (void)pickerScrollView:(MLPickerScrollView *)menuScrollView

didSelecteItemAtIndex:(NSInteger)index{

NSLog(@" 點擊后代理回調:didSelecteItemAtIndex :%ld",index);

}

#pragma mark - delegate

- (void)itemForIndexChange:(MLPickerItem *)item

{

[item changeSizeOfItem];

}

- (void)itemForIndexBack:(MLPickerItem *)item

{

[item backSizeOfItem];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end


二:封裝好選擇器MLPickerScrollView


#import@class MLPickerItem,MLPickerScrollView;@protocol MLPickerScrollViewDelegate/**? *? 選中(代理方法-可選) * *? @param menuScollView MLPickerScrollView *? @param index? ? ? ? 下標 */@optional- (void)pickerScrollView:(MLPickerScrollView *)menuScrollViewdidSelecteItemAtIndex:(NSInteger)index;/** *? 改變中心位置的Item樣式 * *? @param item MLPickerItem */- (void)itemForIndexChange:(MLPickerItem *)item;/** *? 改變-非-中心位置的Item樣式 * *? @param item MLPickerItem */- (void)itemForIndexBack:(MLPickerItem *)item;@end@protocol MLPickerScrollViewDataSource/** *? 個數 * *? @param pickerScrollView MLPickerScrollView * *? @return 需要展示的item個數 */- (NSInteger)numberOfItemAtPickerScrollView:(MLPickerScrollView *)pickerScrollView;/** *? 用來創建MLPickerItem * *? @param pickerScrollView MLPickerScrollView *? @param index? ? ? ? 位置下標 * *? @return MLPickerItem */- (MLPickerItem *)pickerScrollView:(MLPickerScrollView *)pickerScrollView? ? ? ? ? ? ? ? ? itemAtIndex:(NSInteger)index;@end@interface MLPickerScrollView : UIView/** 選中下標 */@property (nonatomic, assign)NSInteger seletedIndex;/** menu寬 */@property (nonatomic, assign)CGFloat itemWidth;/** menu高 */@property (nonatomic, assign)CGFloat itemHeight;/** 第一個item X值 */@property (nonatomic, assign)CGFloat firstItemX;@property (nonatomic, weak)iddelegate;@property (nonatomic, weak)iddataSource;

- (void)reloadData;

- (void)scollToSelectdIndex:(NSInteger)index;

@end

#define kAnimationTime .2#import "MLPickerScrollView.h"#import "MLPickerItem.h"@interface MLPickerScrollView ()@property (nonatomic,strong)UIScrollView *scrollView;

@property (nonatomic,strong)NSMutableArray *items;

@end

@implementation MLPickerScrollView

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

[self setUp];

}

return self;

}

- (id)initWithCoder:(NSCoder *)aDecoder

{

self = [super initWithCoder:aDecoder];

if (self) {

[self setUp];

}

return self;

}

#pragma mark - UI

- (void)setUp

{

self.items = [NSMutableArray array];

self.scrollView = [[UIScrollView alloc] initWithFrame:

CGRectMake(0, 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds))];

self.scrollView.showsHorizontalScrollIndicator = NO;

self.scrollView.showsVerticalScrollIndicator = NO;

self.scrollView.delegate = self;

self.scrollView.decelerationRate = 0.5;

self.scrollView.backgroundColor = [UIColor clearColor];

self.firstItemX = 0;

[self addSubview:self.scrollView];

}

#pragma mark - layout Items

- (void)layoutSubviews

{

NSLog(@"? ---? layoutSubviews? --- ");

[super layoutSubviews];

if (!self.items) {

return;

}

[self layoutItems];

}

- (void)layoutItems

{

NSLog(@"? ---? 刷新數據后重新布局? ---? ");

// layout

self.scrollView.frame = CGRectMake(0, 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds));

// item起始X值

CGFloat startX = self.firstItemX;

NSLog(@"? CGRectGetHeight(self.bounds) : %f? self.itemHeight : %f",CGRectGetHeight(self.bounds),self.itemHeight);

for (int i = 0; i < self.items.count; i++) {

MLPickerItem *item = [self.items objectAtIndex:i];

item.frame = CGRectMake(startX, CGRectGetHeight(self.bounds)-self.itemHeight, self.itemWidth, self.itemHeight);

startX += self.itemWidth;//記錄x的坐標

}

// startX的坐標(所有itemWidth的和) + scrollview.width + firstItemX (0) - itemWidth * 0.5

self.scrollView.contentSize = CGSizeMake(MAX(startX+CGRectGetWidth(self.bounds)-self.firstItemX-self.itemWidth *.5, startX), CGRectGetHeight(self.bounds));

//計算滾動區間

[self setItemAtContentOffset:self.scrollView.contentOffset];

NSLog(@" self.scrollView.contentOffset.width: %f? self.scrollView.contentOffset.height: %f? self.scrollView.contentOffset.x: %f",self.scrollView.contentSize.width,self.scrollView.contentSize.height,self.scrollView.contentOffset.x);

/*

self.scrollView.contentOffset.width: 869.400000

self.scrollView.contentOffset.height: 110.000000

self.scrollView.contentOffset.x: 0.000000

*/

}

#pragma mark - public Method(GetData)

- (void)reloadData

{

// remove

for (MLPickerItem *item in self.items) {

[item removeFromSuperview];

}

[self.items removeAllObjects];

// create

NSInteger count = 0;

if ([self.dataSource respondsToSelector:@selector(numberOfItemAtPickerScrollView:)]) {

count = [self.dataSource numberOfItemAtPickerScrollView:self];

}//刷新界面的時候獲取items的個數

for (NSInteger i = 0; i < count; i++) {//獲取到items的個數后再獲取到每個items的實例對象

MLPickerItem *item = nil;

if ([self.dataSource respondsToSelector:@selector(pickerScrollView:itemAtIndex:)]) {

item = [self.dataSource pickerScrollView:self itemAtIndex:i];

}

//把每個item添加到scrollview

NSAssert(item, @"[self.dataSource pickerScrollView: itemAtIndex:index] can not nil");

item.originalSize = CGSizeMake(self.itemWidth, self.itemHeight);

[self.items addObject:item];

[self.scrollView addSubview:item];

item.index = i;//選中回調index

}

// layout

[self layoutItems];

}

- (void)scollToSelectdIndex:(NSInteger)index

{

[self selectItemAtIndex:index];

}

#pragma mark - Helper

/* 根據scrollView的contentoffset來 是哪個item處于中心點區域, 然后傳出去通知外面 */

- (void)setItemAtContentOffset:(CGPoint)offset

{

NSInteger centerIndex = roundf(offset.x / self.itemWidth);//返回最接近_X的整數

NSLog(@" setItemAtContentOffset: %ld? 移動距離offset——x: %f",(long)centerIndex,offset.x);

for (int i = 0; i < self.items.count; i++) {

MLPickerItem * item = [self.items objectAtIndex:i];

[self itemInCenterBack:item];

if (centerIndex == i) {

[self itemInCenterChange:item];

_seletedIndex = centerIndex;

}

}

}

- (void)scollToItemViewAtIndex:(NSInteger)index animated:(BOOL)animated

{

CGPoint point = CGPointMake(index * _itemWidth,self.scrollView.contentOffset.y);

NSLog(@"? ---? scollToItemViewAtIndex? --- index: %ld? point: %f",index,point.x);

[UIView animateWithDuration:kAnimationTime animations:^{

[self.scrollView setContentOffset:point];

} completion:^(BOOL finished) {

[self setItemAtContentOffset:point];

}];

//先移動再讓中間的變大

}

//滑動停止的時候調用這個方法

/*

contentSize:scrollview可顯示的區域

屬性類型:

struct CGSize {

CGFloat width;

CGFloat height;

};

typedef struct CGSize CGSize;

contentOffset:scrollview當前顯示區域頂點相對于frame頂點的偏移量

屬性類型:

struct CGPoint {

CGFloat x;

CGFloat y;

};

typedef struct CGPoint CGPoint;

contentInset:scrollview的contentview的頂點相對于scrollview的位置

屬性類型:

typedef struct UIEdgeInsets {

CGFloat top, left, bottom, right;

} UIEdgeInsets;

*/

- (void)setCenterContentOffset:(UIScrollView *)scrollView

{

CGFloat offsetX = scrollView.contentOffset.x;//移動的x距離

NSLog(@" scrollView offsetX : %f",offsetX);

if (offsetX < 0) {

offsetX = self.itemWidth * 0.5;//offsetX 為負的時候就滑到第一個位置

}else if (offsetX > (self.items.count - 1) * self.itemWidth) {

offsetX = (self.items.count - 1) * self.itemWidth;

}

NSInteger value = roundf(offsetX / self.itemWidth);//滑到第幾個

NSLog(@" value : %ld? offsetX : %f",value,offsetX);

[UIView animateWithDuration:kAnimationTime animations:^{

[scrollView setContentOffset:CGPointMake(self.itemWidth * value, scrollView.contentOffset.y)];//滑動到哪個就移動到哪個

} completion:^(BOOL finished) {

[self setItemAtContentOffset:scrollView.contentOffset];//然后使中間的最大

}];

}

#pragma mark - delegate

- (void)selectItemAtIndex:(NSInteger)index

{

NSLog(@"點擊選中index : %ld",index);

_seletedIndex = index;

[self scollToItemViewAtIndex:_seletedIndex animated:YES];

if (self.delegate && [self.delegate respondsToSelector:@selector(pickerScrollView:didSelecteItemAtIndex:)]) {

[self.delegate pickerScrollView:self didSelecteItemAtIndex:_seletedIndex];

}

}

- (void)itemInCenterChange:(MLPickerItem*)item

{

if ([self.delegate respondsToSelector:@selector(itemForIndexChange:)]) {

[self.delegate itemForIndexChange:item];

}

}

- (void)itemInCenterBack:(MLPickerItem*)item

{

if ([self.delegate respondsToSelector:@selector(itemForIndexBack:)]) {

[self.delegate itemForIndexBack:item];

}

}

#pragma mark - scrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

//NSLog(@"? --? scrollViewDidScroll? --? ");

for (int i = 0; i < self.items.count; i++) {

MLPickerItem * item = [self.items objectAtIndex:i];

[self itemInCenterBack:item];

}

}

/** 手指離開屏幕后ScrollView還會繼續滾動一段時間直到停止 時執行

*? 如果需要scrollview在停止滑動后一定要執行某段代碼的話應該搭配scrollViewDidEndDragging函數使用

*/

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

NSLog(@"? --? scrollViewDidEndDecelerating? --? ");

[self setCenterContentOffset:scrollView];

}

/** UIScrollView真正停止滑動,應該怎么判斷: 當decelerate = true時,才會調UIScrollView的delegate */

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

if (!decelerate) {

NSLog(@"? --? scrollViewDidEndDragging? --? ");

[self setCenterContentOffset:scrollView];

}

}

@end


三:自定義點擊view放button用于點擊選擇按鈕圖片文字父類MLPickerItem,子類重寫MLDemoItem


#import@interface MLPickerItem : UIView

@property (nonatomic, assign)NSInteger index;

@property (nonatomic, assign)CGSize originalSize;

@property (nonatomic, assign)BOOL selected;

/**

*? 選中回調

*/

@property (nonatomic, copy) void(^PickerItemSelectBlock)(NSInteger index);

/**

*? 子類重寫實現

*/

- (void)changeSizeOfItem;

- (void)backSizeOfItem;

@end

#import "MLPickerItem.h"

@implementation MLPickerItem

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

[self addTapGesture];

}

return self;

}

- (void)addTapGesture

{

self.backgroundColor = [UIColor clearColor];

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

[self addGestureRecognizer:tap];

}

- (void)tap

{

if (self.PickerItemSelectBlock) {

self.PickerItemSelectBlock(self.index);

}

}

// 留給子類調用

- (void)changeSizeOfItem{}

- (void)backSizeOfItem{}

@end

#import "MLPickerItem.h"

@interface MLDemoItem : MLPickerItem

@property (nonatomic, strong)UIButton *discount;

@property (nonatomic, copy)NSString *title;

@property (nonatomic, copy)NSString *imageName;

- (void)setRedTitle;

- (void)setGrayTitle;

@end

#define kITEM_WH 60

#define MLColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]

#define kRGB220 MLColor(151, 151, 151, 1.0)

#define kRGB236 MLColor(51, 51, 51, 1.0)

#import "MLDemoItem.h"

#import "JXButton.h"

@implementation MLDemoItem

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

[self setUI];

}

return self;

}

- (void)setUI

{

//self.backgroundColor = [UIColor greenColor];

_discount = [JXButton buttonWithType:UIButtonTypeCustom];

_discount.enabled = NO;

_discount.titleLabel.font = [UIFont systemFontOfSize:12];

//_discount.layer.borderWidth = 1.0f;

//_discount.layer.cornerRadius = kITEM_WH * 0.5;

//_discount.layer.masksToBounds = YES;

//_discount.backgroundColor = [UIColor redColor];

CGFloat itemW = kITEM_WH;

CGFloat itemH = kITEM_WH;

CGFloat itemX = (self.frame.size.width - itemW)*0.5;

CGFloat itemY = (self.frame.size.height - itemH) *0.5;

_discount.frame = CGRectMake(itemX, itemY, itemW, itemH);

[self addSubview:_discount];

}

- (void)setTitle:(NSString *)title

{

_title = title;

[_discount setTitle:title forState:UIControlStateNormal];

[_discount.titleLabel sizeToFit];

}

-(void)setImageName:(NSString *)imageName{

_imageName = imageName;

[_discount setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];

}

- (void)setRedTitle

{

//_discount.layer.borderColor = kRGB236.CGColor;

[_discount setTitleColor:kRGB236 forState:UIControlStateNormal];

}

- (void)setGrayTitle

{

//_discount.layer.borderColor = kRGB220.CGColor;

[_discount setTitleColor:kRGB220 forState:UIControlStateNormal];

}

/**

*? 改變item成紅色. frame變大

*/

- (void)changeSizeOfItem

{

[self setRedTitle];

CGFloat itemW = kITEM_WH + kITEM_WH*0.5;

CGFloat itemH = kITEM_WH + kITEM_WH*0.5;

CGFloat itemX = (self.frame.size.width - itemW)*0.5;

CGFloat itemY = (self.frame.size.height - itemH) *0.5;

//_discount.layer.borderWidth = 1.0f;

//_discount.layer.cornerRadius = itemW * 0.5;

//_discount.layer.masksToBounds = YES;

_discount.frame = CGRectMake(itemX, itemY, itemW, itemH);

}

/**

*? 改變item成灰色,frame變小

*/

- (void)backSizeOfItem

{

[self setGrayTitle];

//_discount.layer.borderWidth = 1.0f;

//_discount.layer.cornerRadius = kITEM_WH * 0.5;

//_discount.layer.masksToBounds = YES;

CGFloat itemW = kITEM_WH;

CGFloat itemH = kITEM_WH;

CGFloat itemX = (self.frame.size.width - itemW)*0.5;

CGFloat itemY = (self.frame.size.height - itemH) *0.5;

_discount.frame = CGRectMake(itemX, itemY, itemW, itemH);

}

@end

四:點擊MLDemoItem自定義模型MLDemoModel


#import@interface MLDemoModel : NSObject

@property (nonatomic, copy) NSString *dicountTitle;

@property (nonatomic, assign) NSInteger dicountIndex;

@property (nonatomic, copy) NSString *dicountImageName;

@end

@implementation MLDemoModel

@end



五:自定義圖片在上文字在下button:JXButton


#import@interface JXButton : UIButton

@end

#import "JXButton.h"

@implementation JXButton

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

if (self=[super initWithCoder:aDecoder]) {

[self commonInit];

}

return self;

}

-(id)initWithFrame:(CGRect)frame{

if (self=[super initWithFrame:frame]) {

[self commonInit];

}

return self;

}

-(void)commonInit{

self.titleLabel.textAlignment = NSTextAlignmentCenter;

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

self.titleLabel.font = [UIFont systemFontOfSize:14];

}

-(CGRect)titleRectForContentRect:(CGRect)contentRect{

CGFloat titleX = 0;

CGFloat titleY = contentRect.size.height *0.75;

CGFloat titleW = contentRect.size.width;

CGFloat titleH = contentRect.size.height - titleY;

return CGRectMake(titleX - 10, titleY, titleW + 20, titleH);

}

-(CGRect)imageRectForContentRect:(CGRect)contentRect{

CGFloat imageW = CGRectGetWidth(contentRect);

CGFloat imageH = contentRect.size.height * 0.7;

return CGRectMake(0, 0, imageW, imageH);

}

@end

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內容

  • Documentation Supported OS & SDK Versions 支持的OS & SDK版本 S...
    c5550ea746f8閱讀 4,373評論 0 2
  • *7月8日上午 N:Block :跟一個函數塊差不多,會對里面所有的內容的引用計數+1,想要解決就用__block...
    炙冰閱讀 2,512評論 1 14
  • 前段時間,一個朋友說自己拿到了某某品牌的代理權,正在做活動,可以送一包免費的體驗裝,問我要不要體驗下。對于人家的一...
    冷冷123456閱讀 208評論 0 0
  • 今天一天好像跟以往的周末沒有什么兩樣,忙碌,虛度,只是昨晚失眠導致今天精神不怎么好。我絞盡腦汁也沒想到其他值...
    辛德瑞拉_7d9e閱讀 160評論 0 0
  • 修行的路上,聽過這樣的話:每個人都選擇自己願意看見的事去看見,外在境遇源自內心的投射,人自己創造了自己的世界。 無...
    HaiyanF閱讀 321評論 0 0