iOS三張圖無限循環(huán)輪播作箍,小白也能看懂硬梁,無坑可擴(kuò)展。

寫在前面:
一胞得、關(guān)于無限輪播的思路
無非就是以下幾種:collectionView實(shí)現(xiàn)荧止、N+2個(gè)imageView實(shí)現(xiàn)、三個(gè)imageView實(shí)現(xiàn)阶剑,兩個(gè)imageView實(shí)現(xiàn)跃巡。
這其中collectionView感覺有點(diǎn)偷懶的意思,N+2和3個(gè)imageView相比起來3個(gè)imageView更節(jié)省資源牧愁,兩個(gè)imageView還沒有了解過素邪,這里不做介紹。

二猪半、關(guān)于借鑒
樓主自己在寫輪播的時(shí)候查了很多資料兔朦,有很多好用的第三方庫,但是感覺這個(gè)簡(jiǎn)單的功能還是自己做好一點(diǎn)磨确,后期維護(hù)也方便點(diǎn)沽甥,下面也會(huì)將參考的文章鏈接貼出來。
以下的文章中有一些有坑的地方乏奥,我主要參考了一些結(jié)構(gòu)和命名安接。
參考文章:http://www.reibang.com/p/1325998d976b?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=qq

三、個(gè)人實(shí)現(xiàn)原理:
一個(gè)UIView中包含兩個(gè)子視圖:UIScrollView和UIPageControl。
最后將輪播圖拿出去用的時(shí)候直接用這個(gè)UIView的對(duì)象就好盏檐。
Q1:為什么不直接將UIPageControl放在ScrollView中:
A:如果將pageContro放在ScrollView中歇式,那么小圓點(diǎn)會(huì)隨著輪播圖的滾動(dòng)跟著滾動(dòng),并且需要添加在每張圖上都添加一個(gè)pageControl胡野,視覺效果不好材失,也很麻煩。如果不這樣那么就需要?jiǎng)討B(tài)計(jì)算設(shè)置pageControl的frame硫豆,我覺得相較于我采用的那種方法而言資源占用會(huì)更大龙巨。

四、關(guān)于坑的問題
這篇文章中熊响,樓主暫時(shí)沒有發(fā)現(xiàn)什么坑旨别,但是有兩點(diǎn)不確定的地方,這兩點(diǎn)在實(shí)際使用中可能會(huì)有坑汗茄,希望大家注意秸弛,具體如下:
1、代碼中用到了KVO洪碳,但是在移除KVO的時(shí)候是在相關(guān)view的dealloc移除的递览,不確定這個(gè)地方會(huì)不會(huì)有問題,如果有大神瞳腌,希望可以指正绞铃。
2、代碼中的NSTimer(定時(shí)器)本來我個(gè)人理想狀態(tài)下應(yīng)該是想在ViewWillAppera和viewDidDisappear中分別來啟動(dòng)和移除的嫂侍,來防止循環(huán)引用儿捧,無法釋放對(duì)象,但是卻發(fā)現(xiàn)在View中根本沒有調(diào)用這兩個(gè)方法挑宠,只有在Controller中才調(diào)用這兩方法菲盾,這點(diǎn)沒查到答案。所以最后是在dealloc中移除的痹栖,不知道會(huì)不會(huì)留坑亿汞,所以這點(diǎn)需要大家注意。如果有大神揪阿,可以幫我解答一下疗我,謝謝。

---------------------------------我是正文分割線------------------------------------------

思路(直接引用別人文章的南捂,不多說了):
既然是三張圖片吴裤,那在實(shí)現(xiàn)的過程中,為了可以左右滑動(dòng)溺健,都有圖片麦牺,所以初始化的時(shí)候,要讓 UIScrollView 的偏移量為自身的寬度,而且不管是滑像上一張還是下一張剖膳,為了可以正常進(jìn)行左右滑動(dòng)魏颓,在滑動(dòng)結(jié)束的時(shí)候,都要讓 UIScrollView 的偏移量為自身的寬度吱晒,所以在 UIScrollView 滑動(dòng)完一個(gè)圖片之后甸饱,都要將 UIScrollView 的偏移量設(shè)置為自身寬度。

具體實(shí)現(xiàn):
分別創(chuàng)建了兩個(gè)文件:
ZWCHeaderViewScrollView.h
ZWCHeaderViewScrollView.m
ZWCheaderView.h
ZWCheaderView.m

首先ZWCHeaderViewScrollView.h中留給外部的接口:

//將當(dāng)前小圓點(diǎn)的位置存起來
@property(nonatomic,assign)NSInteger currentPageInteger;
//定時(shí)器
@property(nonatomic,strong)NSTimer *rotateTimer;

//重寫init方法
- (instancetype)initWithFrame:(CGRect)frame;
//公布一個(gè)對(duì)外的方法仑濒,傳入圖片的網(wǎng)絡(luò)地址設(shè)置展示輪播圖叹话。
- (void)showWith:(NSArray *)imageViewUrlArray;

ZWCHeaderViewScrollView.m中需要先創(chuàng)建左中右三個(gè)imageView

//創(chuàng)建左中右三個(gè)imageView
@property(nonatomic,strong)UIImageView *leftImageView;
@property(nonatomic,strong)UIImageView *centerImageView;
@property(nonatomic,strong)UIImageView *rightImageView;

并且聲明下面的屬性:

//將傳進(jìn)來的imageView存起來
@property(nonatomic,strong)NSArray *imageArray;
//將傳進(jìn)來的frame存起來。
@property(nonatomic,assign)CGRect scrViewFrame;

對(duì)三個(gè)屬性進(jìn)行懶加載

#pragma mark --- 屬性懶加載

-(UIImageView *)leftImageView{
    if (_leftImageView == nil) {
        _leftImageView = [[UIImageView alloc]init];
    }
    return _leftImageView;
}

-(UIImageView *)centerImageView{
    if (_centerImageView == nil) {
        _centerImageView = [[UIImageView alloc]init];
    }
    return _centerImageView;
}

-(UIImageView *)rightImageView{
    if (_rightImageView == nil) {
        _rightImageView = [[UIImageView alloc]init];
    }
    return _rightImageView;
}

然后大致理一下思路:
1墩瞳、外界初始化一個(gè)ZWCHeaderViewScrollView對(duì)象
2驼壶、通過初始化的對(duì)象調(diào)用show方法并傳入相應(yīng)的圖片網(wǎng)絡(luò)地址
3、在m文件中喉酌,一單show方法被調(diào)用热凹,則立即創(chuàng)建左中右三個(gè)視圖并添加到ScrollView中。

根據(jù)上面的思路ZWCHeaderViewScrollView.m中有如下代碼

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.scrViewFrame = frame;
        self.contentSize = CGSizeMake(CGRectGetWidth(frame)*3, CGRectGetHeight(frame));
        //這里一定要將偏移量設(shè)置為顯示中間那張圖瞭吃。
        self.contentOffset = CGPointMake(CGRectGetWidth(frame), CGRectGetMinY(frame));
        self.delegate = self;
        self.pagingEnabled = YES;
        self.showsHorizontalScrollIndicator = NO;
        //將當(dāng)前顯示圖片設(shè)置為第一張
        self.currentPageInteger = 0;
    }
    return self;
}

-(void)showWith:(NSArray *)imageViewUrlArray
{
    self.imageArray = imageViewUrlArray;
    //創(chuàng)建添加左中右三個(gè)視圖
    [self creaetLeftImageView];
    [self createRightImageView];
    [self createCenterImageView];
}

//左邊視圖
- (void)creaetLeftImageView{
    NSInteger index = (self.currentPageInteger-1+self.imageArray.count)%self.imageArray.count;
    self.leftImageView.frame =CGRectMake(0, 0, CGRectGetWidth(self.scrViewFrame), CGRectGetHeight(self.scrViewFrame));
    [self.leftImageView sd_setImageWithURL:self.imageArray[index][@"pic"] placeholderImage:[UIImage imageNamed:@"tempImage"]];
    self.leftImageView.contentMode = UIViewContentModeScaleAspectFill;
    self.leftImageView.userInteractionEnabled = YES;
    [self addSubview:self.leftImageView];
}

//中間視圖
- (void)createCenterImageView{
    self.centerImageView.frame = CGRectMake(CGRectGetWidth(self.scrViewFrame), 0, CGRectGetWidth(self.scrViewFrame), CGRectGetHeight(self.scrViewFrame));
    [self.centerImageView sd_setImageWithURL:self.imageArray[self.currentPageInteger][@"pic"] placeholderImage:[UIImage imageNamed:@"tempImage"]];
    self.centerImageView.contentMode = UIViewContentModeScaleAspectFill;
    self.centerImageView.userInteractionEnabled = YES;
    [self addSubview:self.centerImageView];
}

//右邊視圖
- (void)createRightImageView{
    self.rightImageView.frame = CGRectMake(CGRectGetWidth(self.scrViewFrame)*2, 0, CGRectGetWidth(self.scrViewFrame), CGRectGetHeight(self.scrViewFrame));
    NSInteger index = (self.currentPageInteger+1+self.imageArray.count)%self.imageArray.count;
    [self.rightImageView sd_setImageWithURL:self.imageArray[index][@"pic"] placeholderImage:[UIImage imageNamed:@"tempImage"]];
    self.rightImageView.contentMode = UIViewContentModeScaleAspectFill;
    self.rightImageView.userInteractionEnabled = YES;
    [self addSubview:self.rightImageView];
}

因?yàn)闃侵魉杏玫亩际蔷W(wǎng)絡(luò)圖片碌嘀,所以直接用了SDWebImage涣旨,如果大家用的本地圖片歪架,這里的數(shù)組直接傳本地圖片名就行了。
到這一步霹陡,添加了三張圖和蚪,已經(jīng)可以滾動(dòng)了,但是只能左右各滾動(dòng)一下烹棉。無法無限滾動(dòng)攒霹,然后再理一下思路:
看一下圖片

Paste_Image.png

用戶看到的永遠(yuǎn)是2這個(gè)畫面,當(dāng)用戶往右滑動(dòng)的時(shí)候看到了三浆洗,滑動(dòng)完之后我們立刻將2這個(gè)位置的圖片設(shè)置為3催束,將3這個(gè)位置的圖片設(shè)置為4(假設(shè)一共5張圖)將1這個(gè)位置的圖片設(shè)置為2,然后立刻將ScrollView的contentOffSet再次移動(dòng)回2這個(gè)位置伏社,并且不用動(dòng)畫效果抠刺。因?yàn)檫@個(gè)動(dòng)作太快,導(dǎo)致用戶根本看不出這個(gè)變化的過程摘昌。誤認(rèn)為是在輪播速妖。

下面上代碼:
思路:只要當(dāng)用戶一拖拽完屏幕,我們就需要判斷聪黎,用戶有沒有翻頁(當(dāng)用戶拖拽沒有超過屏幕一半的距離的時(shí)候罕容,ScrollView是不會(huì)翻頁的),往左翻頁還是往右翻頁,并根據(jù)往左還是往右锦秒,來設(shè)置相應(yīng)的圖片來顯示露泊。

每次當(dāng)ScrollView的滑動(dòng)停止時(shí)就會(huì)調(diào)用一次下面這個(gè)方法(ScrollView的代理方法),以此來抓住用戶一拖拽完就進(jìn)行圖片數(shù)據(jù)處理的時(shí)機(jī)旅择。

//當(dāng)滾動(dòng)停止?jié)L動(dòng)時(shí)調(diào)用此方法滤淳。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//因?yàn)槿绻捶摮晒Γ琧ontentOffSet會(huì)回到原點(diǎn)砌左,所以這里只需要對(duì)大于0小于0進(jìn)行判斷即可脖咐。
//獲取滾動(dòng)視圖移動(dòng)的距離。
    CGFloat userDistance = self.contentOffset.x - CGRectGetWidth(self.scrViewFrame);
    if (userDistance < 0 ) {
        //往左翻頁汇歹,將currentPage往上翻頁
        self.currentPageInteger = (self.currentPageInteger - 1 + self.imageArray.count)% self.imageArray.count;
        [self resetContent];
    }else if (userDistance > 0){
        //往右翻頁屁擅,將currentPage往下翻頁
        self.currentPageInteger = (self.currentPageInteger + 1 + self.imageArray.count)%self.imageArray.count;
        [self resetContent];
    }else{
        //用戶未翻頁成功,什么都不做产弹。
    }
}

改變顯示圖片的數(shù)據(jù)后派歌,馬上調(diào)用重置數(shù)據(jù)方法:

#pragma mark ----   用戶翻頁后重置數(shù)據(jù)
- (void)resetContent{
    
    //重置偏移量
    CGPoint offset = CGPointMake(CGRectGetWidth(self.scrViewFrame), 0);
    [self setContentOffset:offset];
    
    //重置圖片
    NSInteger leftIndex = (self.currentPageInteger-1+self.imageArray.count)%self.imageArray.count;
    NSInteger centerIndex = self.currentPageInteger;
    NSInteger rightIndex = (self.currentPageInteger+1+self.imageArray.count)%self.imageArray.count;
    [self.leftImageView sd_setImageWithURL:self.imageArray[leftIndex][@"pic"] placeholderImage:[UIImage imageNamed:@"tempImage"]];
    [self.centerImageView sd_setImageWithURL:self.imageArray[centerIndex][@"pic"] placeholderImage:[UIImage imageNamed:@"tempImage"]];
    [self.rightImageView sd_setImageWithURL:self.imageArray[rightIndex][@"pic"] placeholderImage:[UIImage imageNamed:@"tempImage"]];
}

到這里,你的滾動(dòng)視圖已經(jīng)可以無限輪播了痰哨。接下來要做的就是胶果,添加定時(shí)器實(shí)現(xiàn)自動(dòng)輪播。

關(guān)于定時(shí)器的一些基本知識(shí)不懂的可以看這里:
http://www.cnblogs.com/zhang6332/p/6253466.html

首先在init方法中啟動(dòng)定時(shí)器,就一行代碼(下面貼的是init方法中加入了啟動(dòng)定時(shí)器后的代碼斤斧,注意看注釋都寫的很清楚)

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.scrViewFrame = frame;
        self.contentSize = CGSizeMake(CGRectGetWidth(frame)*3, CGRectGetHeight(frame));
        //這里一定要將偏移量設(shè)置為顯示中間那張圖早抠。
        self.contentOffset = CGPointMake(CGRectGetWidth(frame), CGRectGetMinY(frame));
        self.delegate = self;
        self.pagingEnabled = YES;
        self.showsHorizontalScrollIndicator = NO;
        //將當(dāng)前顯示圖片設(shè)置為第一張
        self.currentPageInteger = 0;
        //啟動(dòng)定時(shí)器
        self.rotateTimer = [NSTimer scheduledTimerWithTimeInterval:4 target:self selector:@selector(aoutScroll) userInfo:nil repeats:YES];
    }
    return self;
}

啟動(dòng)定時(shí)器后調(diào)用的aoutScroll方法如下:
注意,當(dāng)定時(shí)器自動(dòng)翻頁的時(shí)候需要用動(dòng)畫撬讽。

#pragma mark --- 定時(shí)器自動(dòng)翻頁方法
- (void)aoutScroll{
    NSLog(@"定時(shí)器被調(diào)用------------------------");
    //這里需要判斷如果用戶正在拖動(dòng)屏幕或者視圖正在滾動(dòng)蕊连,是不可以自動(dòng)翻頁的,避免和用戶的操作相沖突游昼。
    if (![self isDragging] || ![self isDecelerating]) {
        //這里只對(duì)contentOffset進(jìn)行設(shè)置甘苍,因?yàn)橐坏┰O(shè)置了contentOffSet后代理就會(huì)自動(dòng)調(diào)用- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView此方法,代碼重用烘豌,會(huì)利用我們上面寫好的邏輯幫我們處理剩下的東西载庭。
        [self setContentOffset:CGPointMake(CGRectGetWidth(self.scrViewFrame)*2, 0) animated:YES];
    }
}

添加好定時(shí)器之后還需要考慮,如果用戶正在拖動(dòng)視圖或者視圖正在滾動(dòng)廊佩,那么此時(shí)需要先暫停定時(shí)器囚聚,當(dāng)用戶的拖拽動(dòng)作結(jié)束之后再開啟定時(shí)器。防止和用戶動(dòng)作沖突罐寨。

#pragma mark ---  ScrollView代理
//當(dāng)調(diào)用contentoffset方法動(dòng)畫完畢時(shí)調(diào)用次方法
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
    [self scrollViewDidEndDecelerating:self];
    NSLog(@"調(diào)用方法contentoffset方法動(dòng)畫完畢時(shí)調(diào)用次方法+++++++++++");
}

//當(dāng)用手指拖拽的時(shí)候調(diào)用次方法
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    NSLog(@"正在拖拽視圖靡挥,所以需要將自動(dòng)播放暫停掉");
    //setFireDate:設(shè)置定時(shí)器在什么時(shí)間啟動(dòng)
    //[NSDate distantFuture]:將來的某一時(shí)刻
    [self.rotateTimer setFireDate:[NSDate distantFuture]];
}

當(dāng)用戶屏幕停止?jié)L動(dòng)后開啟定時(shí)器。(注意看注釋)

//當(dāng)手指拖拽產(chǎn)生的滾動(dòng)停止?jié)L動(dòng)時(shí)調(diào)用此方法鸯绿。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    //視圖靜止之后跋破,過4秒在開啟定時(shí)器
    NSLog(@"開啟定時(shí)器");
    [self.rotateTimer setFireDate:[NSDate dateWithTimeInterval:4 sinceDate:[NSDate date]]];
    NSLog(@"scrollViewDidEndDecelerating------------%f",self.contentOffset.x);
    //獲取滾動(dòng)視圖移動(dòng)的距離簸淀。
    CGFloat userDistance = self.contentOffset.x - CGRectGetWidth(self.scrViewFrame);
    if (userDistance < 0 ) {
        //往左翻頁,將currentPage往上翻頁
        self.currentPageInteger = (self.currentPageInteger - 1 + self.imageArray.count)% self.imageArray.count;
        [self resetContent];
    }else if (userDistance > 0){
        //往右翻頁毒返,將currentPage往下翻頁
        self.currentPageInteger = (self.currentPageInteger + 1 + self.imageArray.count)%self.imageArray.count;
        [self resetContent];
    }else{
        //用戶未翻頁成功租幕,什么都不做。
    }
    
}

到這里拧簸,已經(jīng)可以無限自動(dòng)滾動(dòng)了劲绪。接下來需要添加pageControl

------------------------------------------我是分割線-----------------
新建
ZWCheaderView.h
ZWCheaderView.m

同樣在ZWCheaderView.h中公布兩個(gè)相同的方法

- (instancetype)initWithFrame:(CGRect)frame;

- (void)showWith:(NSArray *)imageViewUrlArray;

在ZWCheaderView.m中聲明兩個(gè)屬性


//滾動(dòng)視圖
@property(nonatomic,strong)ZWCHeaderViewScrollView *bannerScrView;
//小圓點(diǎn)控制器
@property(nonatomic,strong)UIPageControl *bannerpageControl;

bannerpageControl懶加載

-(UIPageControl *)bannerpageControl{
    if (_bannerpageControl == nil) {
        _bannerpageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(CGRectGetWidth(self.frame)-80, CGRectGetHeight(self.frame)-30, 40, 20)];
    }
    return _bannerpageControl;
}

整理一下思路:
需要設(shè)置一個(gè)KVO 當(dāng)ScrollView的currentPage變化時(shí)說明滾動(dòng)視圖翻頁了,那么用kvo設(shè)置小圓點(diǎn)到相應(yīng)的位置盆赤。

下面的代碼我想小白都應(yīng)該看得懂了贾富。
主要思路就是:
1、將滾動(dòng)視圖添加到這個(gè)View中
2牺六、將pageControl添加到這個(gè)視圖中
3颤枪、通過KVO來監(jiān)控滾動(dòng)視圖的翻頁狀況,并同步設(shè)置小圓點(diǎn)的位置淑际。
4畏纲、消除KVO,消除定時(shí)器春缕。

重寫init方法,并設(shè)置一些屬性

-(instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        self.bannerScrView = [[ZWCHeaderViewScrollView alloc]initWithFrame:frame];
        [self addSubview:self.bannerpageControl];
        //設(shè)置KVO
        [self.bannerScrView addObserver:self forKeyPath:@"currentPageInteger" options:NSKeyValueObservingOptionNew context:nil];
        [self addSubview:self.bannerScrView];
        //將小圓點(diǎn)設(shè)置在圖層最上層防止被ScrollView蓋住
        [self bringSubviewToFront:self.bannerpageControl];
    }
    return self;
}

在show方法中調(diào)用ZWCHeaderViewScrollView.h中的show方法盗胀,并吧數(shù)據(jù)傳過去同時(shí)設(shè)置一些pageControl的屬性。

- (void)showWith:(NSArray *)imageViewUrlArray{
    [self.bannerScrView showWith:imageViewUrlArray];
    self.bannerpageControl.numberOfPages = imageViewUrlArray.count;
    self.bannerpageControl.userInteractionEnabled = NO;
    self.bannerpageControl.currentPage = 0;
    self.bannerpageControl.currentPageIndicatorTintColor = [UIColor redColor];
    self.bannerpageControl.pageIndicatorTintColor = [UIColor yellowColor];
}

實(shí)現(xiàn)KVO的回調(diào)方法锄贼,對(duì)pageControl進(jìn)行實(shí)時(shí)的設(shè)置票灰。

//kvo監(jiān)控翻頁動(dòng)作
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    if ([keyPath isEqualToString:@"currentPageInteger"]) {
        self.bannerpageControl.currentPage = [[change valueForKey:@"new"] integerValue];
        NSLog(@"當(dāng)前頁已改變------%@",[change valueForKey:@"new"]);
    }
}

最后在ZWCheaderView的dealloc中移除KVO,在ZWCHeaderViewScrollView的dealloc中停止定時(shí)器。這里就涉及到我上面說的兩個(gè)可能有坑的問題咱娶,希望大神可以指教米间。

ZWCheaderView.m中

- (void)dealloc
{
    //移除KVO强品,注意檢查這里會(huì)不會(huì)移除不完全
    [_bannerScrView removeObserver:self forKeyPath:@"currentPageIntegere"];
    
}

ZWCHeaderViewScrollView.m中

-(void)dealloc{
    //停止定時(shí)器膘侮,防止crash
    [_rotateTimer invalidate];
}

好了到這里就完了。謝謝大家一直可以看完的榛,如文中有錯(cuò)誤的地方或者可以改進(jìn)的地方希望可以指正琼了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市夫晌,隨后出現(xiàn)的幾起案子雕薪,更是在濱河造成了極大的恐慌,老刑警劉巖晓淀,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件所袁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凶掰,警方通過查閱死者的電腦和手機(jī)燥爷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門蜈亩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人前翎,你說我怎么就攤上這事稚配。” “怎么了港华?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵道川,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我立宜,道長(zhǎng)冒萄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任橙数,我火速辦了婚禮宦言,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘商模。我一直安慰自己奠旺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布施流。 她就那樣靜靜地躺著响疚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞪醋。 梳的紋絲不亂的頭發(fā)上忿晕,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音银受,去河邊找鬼践盼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宾巍,可吹牛的內(nèi)容都是我干的咕幻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼顶霞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼肄程!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起选浑,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蓝厌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后古徒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拓提,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年隧膘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了代态。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狐粱。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖胆数,靈堂內(nèi)的尸體忽然破棺而出肌蜻,到底是詐尸還是另有隱情,我是刑警寧澤必尼,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布蒋搜,位于F島的核電站,受9級(jí)特大地震影響判莉,放射性物質(zhì)發(fā)生泄漏豆挽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一券盅、第九天 我趴在偏房一處隱蔽的房頂上張望帮哈。 院中可真熱鬧,春花似錦锰镀、人聲如沸娘侍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憾筏。三九已至,卻和暖如春花鹅,著一層夾襖步出監(jiān)牢的瞬間氧腰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工刨肃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留古拴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓真友,卻偏偏與公主長(zhǎng)得像黄痪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锻狗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫满力、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,109評(píng)論 4 62
  • 關(guān)于輪播圖的實(shí)現(xiàn), zz所了解到的有三種: 利用scrollView根據(jù)輪播圖片的多少來創(chuàng)建imageview 然...
    zz__我不二閱讀 3,067評(píng)論 2 13
  • “我年紀(jì)越大轻纪,越認(rèn)為心理不管正不正常,邪惡就是邪惡叠纷。我們每個(gè)人或多或少都會(huì)受到邪惡行為的誘惑刻帚,但這不表示我們對(duì)邪惡...
    怯怯灼木閱讀 228評(píng)論 0 1
  • 教材類書籍,理論層面較多涩嚣,彌補(bǔ)了我對(duì)VI設(shè)計(jì)的基礎(chǔ)性的認(rèn)知崇众。 VI設(shè)計(jì)的概論 書中追本溯源的闡述:所謂的統(tǒng)一識(shí)別掂僵,...
    安古閱讀 428評(píng)論 0 0
  • 需要寫 需要表達(dá) 需要不斷閱讀和修正 需要真正的靜心和踏實(shí) 需要謙虛 需要不斷改進(jìn) 需要一個(gè)平常心 需要活在當(dāng)下...
    Annie簡(jiǎn)月閱讀 130評(píng)論 0 0