CALyer解讀--總有一個(gè)點(diǎn)會(huì)讓你想起它

花絮:基于上一篇文章又有幾個(gè)月沒有寫文章了絮短,剛好最近項(xiàng)目基本完成填抬,開啟了16年制定的目標(biāo)每?jī)扇齻€(gè)月讀一本書籍翻默,并做好記錄臼婆,希望自己可以堅(jiān)持下去抒痒,這次讀的是核心動(dòng)畫高級(jí)技巧,已經(jīng)把電子檔和最后推薦的軟件上傳之碼云上面,喜歡的朋友可以去下載颁褂。

在此聲明:本文章為七秒一個(gè)字一個(gè)字敲起來(lái)的故响,在敲打的過(guò)程中難免有錯(cuò)別字,如果錯(cuò)別字對(duì)于您由理解的影響颁独,那么請(qǐng)你在下留言彩届,七秒會(huì)立即改正。

敲起來(lái)

傳送門

1. contentsGravity

表示設(shè)置layer上面設(shè)置圖片的的拉伸方式誓酒。和UIImage上面的contentModel一致樟蠕,只是它設(shè)置的類型是NSString類型

 kCAGravityCenter
 kCAGravityTop
 kCAGravityBottom
 kCAGravityLeft
 kCAGravityRight
 kCAGravityTopLeft
 kCAGravityTopRight
 kCAGravityBottomLeft
 kCAGravityBottomRight
 kCAGravityResize
 kCAGravityResizeAspect
 kCAGravityResizeAspectFill         

2.contentsScale

表示當(dāng)前layer設(shè)置的圖片像素尺寸和試圖大小的比例,可以當(dāng)前圖片在當(dāng)下屏幕上面一個(gè)點(diǎn)顯示的像素值靠柑。
注意:如果設(shè)置了contentsGravity的值為改變寄宿圖片拉伸效果會(huì)導(dǎo)致設(shè)置的contentsScale設(shè)置的效果無(wú)效

3.contentsRect

表示要在layer區(qū)域顯示的寄宿圖片的區(qū)域寨辩。contentRect設(shè)置的單位坐標(biāo),默認(rèn)為(0歼冰,0靡狞,1,1)隔嫡,如果我們?cè)O(shè)置為(0,0,0.5,0.5)時(shí)甸怕,layer上面顯示的圖片就是寄宿圖片左上角四分之一。

4.contentsCenter

定義一個(gè)固定的邊框和一個(gè)在圖層上面可以拉伸的區(qū)域腮恩。設(shè)置的也是單位坐標(biāo)梢杭。注意:此屬性我們也是可以在XIB里面設(shè)置。stretching對(duì)應(yīng)的

5.shadowOpacity 設(shè)置layer的陰影

1.需要設(shè)置陰影的時(shí)候秸滴,必須設(shè)置shadowOpacity的值是在0.0到1.0之間式曲,0.0表示完全透明,1.0表示完全不透明
2.設(shè)置陰影的另外三個(gè)必不可少的方法shadowColor、shadowOffest吝羞、shadowRadius
shadowColor表示設(shè)置的陰影的顏色,一個(gè)CGColorRef對(duì)象
shadowOffest表示設(shè)置陰影的方向和距離。是一個(gè)CGSize的值内颗,寬度控制陰影的位移钧排,高度控制著縱向的位移。默認(rèn)是{0,-3}為何為負(fù)數(shù)均澳,因?yàn)樵贛AC OS 上面原點(diǎn)在左下角恨溜。所以在MAC OS上面是在下面顯示的陰影。
shadowRadius控制著陰影的模糊度找前,當(dāng)為0的時(shí)候糟袁,陰影和layer就會(huì)有一個(gè)明顯的分界線,當(dāng)值越來(lái)越大的時(shí)候躺盛,就會(huì)越來(lái)越自然和模糊项戴。

注意:當(dāng)設(shè)置陰影和裁剪的時(shí)候,會(huì)把陰影的裁剪掉槽惫,因?yàn)殛幱笆窃趌ayer以外的周叮,而裁剪就是沿著layer邊框裁剪,一般就需要在l試圖層上面在添加一個(gè)試圖界斜,使用低試圖的陰影仿耽,使用上試圖的裁剪即可
注意:陰影不是根據(jù)邊界和圓角路徑來(lái)確認(rèn)陰影形狀的,而是將寄宿圖(包括子試圖等)考慮在內(nèi)各薇,然后通過(guò)這些來(lái)完美搭配圖層形狀從而創(chuàng)建一個(gè)陰影(也就是根據(jù)寄宿圖形狀來(lái)顯示陰影项贺,而不是邊界),這也是有多個(gè)子圖層時(shí)峭判,計(jì)算陰影就會(huì)很耗資源的原因

6.layer上面的觸摸判斷hitTest來(lái)判斷

我們可以根據(jù)觸摸點(diǎn)來(lái)轉(zhuǎn)換坐標(biāo)(convertPoint:fromLayer)和包含當(dāng)下坐標(biāo)點(diǎn)(containsPoint:)判斷是否在當(dāng)前的layer來(lái)響應(yīng)當(dāng)下的事件
同樣我們可以使用hitTest :來(lái)返回觸摸點(diǎn)的layer來(lái)判斷开缎,從而響應(yīng)事件

 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
 UITouch *touch = touches.anyObject;
 CGPoint point = [touch locationInView:self.contentView];
/**使用hitTest 來(lái)判斷是否觸摸點(diǎn)在那個(gè)layer圖層上面 如果超過(guò)點(diǎn)超過(guò)了最外層layer上面,則會(huì)返回nil  測(cè)試下即使更改底部layer的zPosition讓底部layer顯示上面后朝抖,也是可以觸摸到的啥箭,和書上面顯示的有沖突,不知治宣。急侥。。侮邀。*/
 CALayer *layer =  [self.contentView.layer hitTest:point];
 if (layer == self.redLayer) {
     NSLog(@"觸摸紅色的layer");
}else if (layer == self.blueLayer){
     NSLog(@"觸摸藍(lán)色layer");
}
}

7.shadowPath設(shè)置陰影的圖形

如果設(shè)置知道圖層的陰影形狀切圖層層級(jí)比較多的時(shí)候坏怪,我們可以使用shadowPath來(lái)設(shè)置圖層的陰影;

 UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:contentLayer.bounds cornerRadius:50];
 contentLayer.shadowPath = path.CGPath;

8.mask遮蓋來(lái)設(shè)置圖層顯示的形狀

`mask`可以理解為遮蓋绊茧,蒙版铝宵,父試圖(就是設(shè)置`mask`的圖層)顯示的區(qū)域就是`mask`的區(qū)域與父圖層區(qū)域相較的部分,超過(guò)的部分就會(huì)被`mask`剪切掉。
'' CALayer *layer = [CALayer layer];
'' UIImage *sex36m = [UIImage imageNamed:@"sex36m"];
'' layer.frame = contentLayer.bounds;
'' layer.contentsGravity = kCAGravityCenter;
'' layer.contents = (__bridge id _Nullable)sex36m.CGImage;
'' contentLayer.mask = layer;

9.minificationFilter(縮小圖片)和magnificationFilter(放大圖片)壓縮和拉伸過(guò)濾

layer三種拉伸過(guò)濾模式
kCAFilterLinear 采用雙線性濾波算法鹏秋,通過(guò)對(duì)多個(gè)像素取樣最終生成新的值尊蚁,得到一個(gè)平滑的表現(xiàn)拉伸。當(dāng)放大的倍數(shù)比較大的時(shí)候圖片就會(huì)模糊不清侣夷。
kCAFilterTrilinearkCAFilterLinear非常相似横朋,采用的是三線性濾波算法存儲(chǔ)多個(gè)大小情況下的圖片,并三維取樣百拓,同時(shí)結(jié)合大圖和小圖的存儲(chǔ)進(jìn)而得到最后的結(jié)果琴锭。
kCAFilterNearest 取樣最近的單像素點(diǎn)而不管其他顏色,這樣做非逞么快决帖,也不會(huì)是圖片模糊,但卻是圖片馬賽克更嚴(yán)重蓖捶。如果圖片顏色分界線比較明顯地回,那么使用此模式比較好。

image.png

10.layerClass

1.返回一個(gè)當(dāng)前試圖寄宿的圖層類型腺阳,當(dāng)我們想更換試圖的寄宿的圖層類型的時(shí)候落君,我們就需要重寫這個(gè)方法返回試圖類型。注意當(dāng)我們創(chuàng)建試圖后亭引,就無(wú)法更改它的主寄宿圖層绎速,可以通過(guò)layerClass來(lái)返回一個(gè)試圖的主寄宿圖當(dāng)然我們也是可以通過(guò)添加圖層到試圖上面,那樣我們就浪費(fèi)了試圖創(chuàng)建的主試圖焙蚓,同樣子圖層也是無(wú)法跟蹤試圖邊界的大小纹冤,所以就需要我們手動(dòng)更新子圖層邊界,所以我們不建議添加子圖層的方法來(lái)改變?cè)噲D的顯示圖層购公。

11.2D變換

1.`view`上面的`transform`是一個(gè)`CGAffineTransform`類型,且`layer`上面與之對(duì)應(yīng)的屬性為`affineTransform`萌京,而`layer`上面的`transform`屬性是一個(gè)`CGTransform3D `類型。`CGAffineTransform`類型是一個(gè)2D平面的操作的宏浩,也是`CGTransform3D `類型里面沿著Z軸操作知残。
2.`CGAffineTransformMakeScale(<#CGFloat sx#>, <#CGFloat sy#>)`更改大小的
`CGAffineTransformMakeTranslation(<#CGFloat tx#>, <#CGFloat ty#>)`更改位置
`CGAffineTransformMakeRotation(<#CGFloat angle#>)` 旋轉(zhuǎn)角度
3.組合操作
`CGAffineTransformIdentity `創(chuàng)建一個(gè)空的`transform`
`CGAffineTransformScale(<#CGAffineTransform t#>, <#CGFloat sx#>, <#CGFloat sy#>)` 基于上一個(gè)`transform`在添加改變大小操作
`CGAffineTransformTranslate(<#CGAffineTransform t#>, <#CGFloat tx#>, <#CGFloat ty#>)`基于上一個(gè)`transform` 在添加位移操作
`CGAffineTransformRotate(<#CGAffineTransform t#>, <#CGFloat angle#>)` 基于上一個(gè)`transform`在添加旋轉(zhuǎn)操作
`CGAffineTransformConcat(<#CGAffineTransform t1#>, <#CGAffineTransform t2#>)`混合兩個(gè)已經(jīng)存在的操作,**放在前面的先執(zhí)行**
**注意:當(dāng)使用混合`transfoem`操作動(dòng)畫的時(shí)候,上一個(gè)添加的操作會(huì)直接影響到下一個(gè)`transform`的比庄,特別是縮放和位移直接按的影響求妹,如:一個(gè)view 寬高都是100 ,先執(zhí)行x,y各縮小50%佳窑,再X軸位移100制恍,相對(duì)于開始位置實(shí)際位移多少?(75)**

12.3D變換

1.3D變換比2D變換多了3d立體感的效果神凑。其實(shí)也是使用`透視投影`來(lái)實(shí)現(xiàn)的
設(shè)置`透視投影`的值净神,就是設(shè)置m34的值。一般設(shè)置為`-1.0/(500~1000)`看著更想3D的時(shí)候,就是你想要的值
2.其實(shí)3D和2D的用法基本是一致的鹃唯,再次我就不啰嗦了爱榕。但是還是要介紹兩個(gè)屬性`sublayerTransform`和`isDoubleSided`
3.`sublayerTransform`當(dāng)我們想讓父試圖上面多個(gè)子試圖都進(jìn)行單獨(dú)的3D變換的時(shí)候,那么我就需要設(shè)置各個(gè)子試圖的`透視投影`,那樣看起來(lái)很麻煩俯渤,簡(jiǎn)單一點(diǎn)呆细,我就可以設(shè)置父試圖的`sublayerTransform`屬性來(lái)設(shè)置統(tǒng)一的`透視投影`,為什么要設(shè)置統(tǒng)一的`透視投影`,是為了讓3D效果更逼真八匠,是讓`滅點(diǎn)`統(tǒng)一。
4.`isDoubleSided`來(lái)描述圖層的背面是否會(huì)被繪制趴酣,當(dāng)不需要繪制背面的圖像的時(shí)候梨树,我們就可以設(shè)置為`false`來(lái)節(jié)約GPU的開銷,默認(rèn)是`true`**注意:其實(shí)背面繪制的圖和正面剛好產(chǎn)生的鏡子效應(yīng)**
**注意岖寞,說(shuō)的是3d變化抡四,其實(shí)并不是一個(gè)真正的3D,僅僅是平面繪制的仗谆,而是改變了大小加上`透視投影`來(lái)產(chǎn)生的一個(gè)假的3D效果 想看3DDemo的可以看下[]**
3d各個(gè)軸旋轉(zhuǎn)方向

13指巡,CAGradientLayer 顏色漸變的layer

1.colors用來(lái)顯示變化顏色的數(shù)組,數(shù)組的順序就是顏色漸變的吮吸
2.locations:表示每個(gè)顏色開始變化的數(shù)組隶垮。注意:值只能遞增從0-1,切數(shù)組的count必須和colorscount一致
3.startPoint:表示開始顏色開始的位置藻雪,和endPoint一起來(lái)表示顏色漸變的方向。注意:開始的位置和locations設(shè)置的值是相對(duì)應(yīng)的

14.CAReplicatorLayer 高效生成多個(gè)相似的layer

1.我可能可以使用CAReplicatorLayer來(lái)高效生成多個(gè)多個(gè)相似的圖層狸吞。
2.instanceCount:表示圖層重復(fù)多少次
3.instanceTransform:來(lái)制定圖層是怎么樣的變換勉耀,注意:圖層的變換是基于上一個(gè)圖層變換后的位置為基點(diǎn)做變換,而不是第一個(gè)圖層
4.instanceGreenOffset蹋偏、instanceBlueOffset便斥、instanceRedOffsetinstanceAlphaOffset四個(gè)屬性威始,來(lái)表示顏色和透明度的變化枢纠。

15,隱式動(dòng)畫

1.隱式動(dòng)畫:改變圖層(不是試圖上面寄宿的圖層)上面動(dòng)畫屬性所執(zhí)行的動(dòng)畫(個(gè)人總結(jié))
2,calyer上面更改屬性(可以做動(dòng)畫的屬性)的值,默認(rèn)都是可以做動(dòng)畫(隱式)改變的黎棠,動(dòng)畫的時(shí)間默認(rèn)0.25s
3.這些動(dòng)畫的類型和時(shí)間都是根據(jù)當(dāng)前的事務(wù)來(lái)決定的晋渺。事務(wù)實(shí)際上是Core Animation用來(lái)包含一系列屬性動(dòng)畫的集合的機(jī)制,注意:任何由事務(wù)來(lái)指定的做動(dòng)畫的屬性都不會(huì)立馬改變葫掉,而是只有當(dāng)事務(wù)提交的時(shí)候些举,才可以改變。
4.在每一個(gè)runloop周期里面都自動(dòng)開啟一次新的事務(wù)俭厚,這也就是你不需要手動(dòng)開啟事務(wù)的原因户魏。任何一次runloop循環(huán)中屬性的改變都被集中起來(lái),然后做一個(gè)事務(wù)時(shí)間動(dòng)畫
5.事務(wù)由CATransaction類來(lái)便是,begin表示開啟一個(gè)事務(wù)叼丑,commit提交事務(wù)关翎。setAnimationDuration設(shè)置事務(wù)的時(shí)間(也就是動(dòng)畫的時(shí)間)setCompletionBlock表示執(zhí)行完畢動(dòng)畫之后,再執(zhí)行的事件(block里面的事件的事務(wù)和外面你設(shè)置的事務(wù)是不一致的鸠信,當(dāng)執(zhí)行完畢之后纵寝,設(shè)置的事務(wù)以及移除棧,所以block執(zhí)行的就是你當(dāng)前runloop里面的事務(wù))注意:如果你直接設(shè)置當(dāng)前runloop里面事務(wù)的時(shí)間星立,那么就會(huì)更改這個(gè)runloop里面所有動(dòng)畫的時(shí)間

16.隱式動(dòng)畫實(shí)現(xiàn)原理

1.當(dāng)CALyer的屬性被修改的時(shí)后爽茴,它會(huì)調(diào)用-actionForKey:傳遞是屬性名稱
2.圖層首先檢測(cè)它是否有委托,并且是否是實(shí)現(xiàn)CALayerDelegate協(xié)議制定的-actionForlayer:forkey方法绰垂,如果有直接調(diào)用返回結(jié)果室奏。
3.如果沒有委托,或者委托沒有實(shí)現(xiàn)-actionForLayer:forkey方法劲装,圖層接著檢查包含屬性名稱對(duì)應(yīng)行為映射的actions字典
4.如果actions字典沒有包含對(duì)應(yīng)的屬性胧沫,那么圖層接著在它的style字典接著搜索屬性名稱
5.最后如果在style里面也沒找到對(duì)應(yīng)的行為,那么圖層將會(huì)直接調(diào)用自定義了每個(gè)是屬性的標(biāo)準(zhǔn)行為的-defaultActionForKey:方法

補(bǔ)充:大家都知道占业,直接改變視圖上layer的屬性是不會(huì)做隱式動(dòng)畫的绒怨,那是為何?
每一個(gè)視圖UIView對(duì)它關(guān)聯(lián)的圖層都扮演了一個(gè)委托谦疾,并且 提供了-actionLayer:forKey的實(shí)現(xiàn)方法南蹂。當(dāng)不在一個(gè)動(dòng)畫塊的實(shí)現(xiàn)中,UIView對(duì)所有的圖層行為返回nil餐蔬,但是在動(dòng)畫block(動(dòng)畫block)范圍之內(nèi)碎紊,它就會(huì)返回一個(gè)非空值,這就是為何我們直接作用在試圖上面的layer不會(huì)由隱式動(dòng)畫

17.呈現(xiàn)圖層:

1.當(dāng)我們操作layer上面動(dòng)畫時(shí)樊诺,我們更改的屬性值是立馬改變的仗考,但是給我們顯示出來(lái)的卻是動(dòng)畫改變。其實(shí)我們看到的動(dòng)畫改變就是一個(gè)呈現(xiàn)圖層
2.呈現(xiàn)圖層:其實(shí)就是圖層的賦值词爬,并且記錄著圖層在屏幕上當(dāng)下時(shí)刻的屬性值秃嗜,我們可以使用'-presentationLayer'來(lái)訪問(wèn)。
3.眾所周知顿膨,iOS屏幕刷新的頻率是一秒60次锅锨,當(dāng)我們執(zhí)行動(dòng)畫的之間大于60分之一秒的時(shí)候,Core Animation就會(huì)在一次舊值和新值之間恋沃,對(duì)屏幕上的圖層進(jìn)行重新組織必搞,更改呈現(xiàn)圖層屬性的值。

補(bǔ)充呈現(xiàn)圖層用處:
4.1囊咏,一般我們是不會(huì)操作或者訪問(wèn)圖層的呈現(xiàn)圖層的恕洲。
4.2如果創(chuàng)建一個(gè)定時(shí)動(dòng)畫塔橡,這個(gè)時(shí)候就需要準(zhǔn)確知道某一時(shí)刻圖層顯示的位置,這個(gè)時(shí)候我們可以需要獲取呈現(xiàn)圖層上面屬性的位置霜第,來(lái)操作動(dòng)畫了
4.3葛家,當(dāng)我們使用-hitTest來(lái)響應(yīng)圖層上面的觸摸的時(shí)候,我們可以使用呈現(xiàn)圖層來(lái)判斷泌类,例如:如果圖層在移動(dòng)中癞谒,來(lái)點(diǎn)擊移動(dòng)的圖層,那么這個(gè)時(shí)候呈現(xiàn)試圖就會(huì)非常有用

fileprivate func wj_testPresentationLayer(_ touches:Set<UITouch>)
    let  touch  = (touches as NSSet).anyObject() as! UITouch;
    let point =  touch.location(in: self.view);
    if((self.animationLayer.presentation()?.hitTest(point)) != nil){
        self.animationLayer.backgroundColor = UIColor.gray.cgColor;
    }else{
        CATransaction.begin();`
        CATransaction.setAnimationDuration(4.0);`
        CATransaction.setCompletionBlock({`
            self.animationLayer.backgroundColor = UIColor.red.cgColor;
        })
        self.animationLayer.position = point;`
        CATransaction.commit();`
    }
}

18視圖上面由多個(gè)動(dòng)畫的時(shí)候刃榨,如何區(qū)分

1.使用-addAnimation:forKey:根據(jù)key我們可以區(qū)分不同的動(dòng)畫弹砚。如果是相同的動(dòng)畫操作不同的圖層呢?
2,我們可以給顯示動(dòng)畫通過(guò)**KVC**的方法設(shè)置對(duì)應(yīng)的圖層或者專屬值枢希。
3.在代理里面我們就可以直接可以區(qū)分圖層或者動(dòng)畫了

  animation.setValue("七秒", forKey: "name")
 let anme = anim.value(forKey: "name");
 print(anme);

19 關(guān)鍵幀動(dòng)畫(CAKeyframeAnimation)的rotationMode

1.rotationMode設(shè)置為kCAAnimationRotateAuto的時(shí)候迅栅,我們可以讓圖層自動(dòng)調(diào)整沿著path設(shè)置的曲線的切線方向

20設(shè)置圖層旋轉(zhuǎn)360°

    `animation.keyPath = "transform.rotation";`
    animation.byValue = (M_PI*2); `
    `transform.rotation` 稱之為虛擬屬性。

21動(dòng)畫組晴玖,也比較簡(jiǎn)單

    `CAAnimationGroup`動(dòng)畫組有個(gè)`animations`數(shù)組屬性,來(lái)添加多個(gè)作用在圖層上面的動(dòng)畫为流,添加動(dòng)畫沒有前后順序呕屎,一般我們都是根據(jù)動(dòng)畫的`beginTime`來(lái)區(qū)分前后順序

22 過(guò)渡動(dòng)畫

1.當(dāng)我們需要更改圖層的底圖或者文本的時(shí)候,想動(dòng)畫更改那別不能動(dòng)畫的屬性的時(shí)候敬察,這是我們就可以使用過(guò)渡動(dòng)畫秀睛。
2,過(guò)渡動(dòng)畫使用CATransition來(lái)表示,使用typesubType來(lái)表示變換效果莲祸,注意是CATransition蹂安,而不是事務(wù)CATransaction
3.type:表示想要使用那種變化效果,subType:表示效果從那個(gè)方向過(guò)來(lái)锐帜。
4.startProgress 開始動(dòng)畫的地方,默認(rèn)是0
5.endProgress 結(jié)束動(dòng)畫的地方田盈,默認(rèn)是1.0

type:
kCATransitionFade :淡入淡出
kCATransitionMoveIn:從頂部滑動(dòng)進(jìn)來(lái)
kCATransitionPush: 一側(cè)滑動(dòng)進(jìn)來(lái),把舊圖推送出去
kCATransitionReveal:把舊圖層滑動(dòng)出去缴阎,顯示新的
以下為私有API允瞧,目前還可以使用:
    cube    立方體
    suckEffect  吸走的效果  
    oglFlip    前后翻轉(zhuǎn)效
    rippleEffect  波紋效果 
    pageCurl   翻頁(yè)起來(lái)  
    pageUnCurl   翻頁(yè)下來(lái)  
    cameraIrisHollowOpen   鏡頭開  
    cameraIrisHollowClose   鏡頭關(guān)
  
subType:
kCATransitionFromRight:     從右側(cè)劃入
kCATransitionFromLeft:    從左側(cè)滑入
kCATransitionFromTop         往頭部方向滑動(dòng)
kCATransitionFromBottom   往底部方向滑動(dòng)

注意:過(guò)渡動(dòng)畫設(shè)置動(dòng)畫的key是一個(gè)常量transition,而不是你設(shè)置的key蛮拔,在此我們可以使用kvc來(lái)區(qū)分動(dòng)畫

切換tabbar加上過(guò)渡動(dòng)畫

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    let animation = CATransition.init();
    animation.duration = 4.0;
    animation.type = "oglFlip";
    if viewController.isMember(of: ViewController.self) {
        animation.subtype = kCATransitionFromLeft;
    }else{
        animation.subtype = kCATransitionFromRight;
    }
    self.view.layer.add(animation, forKey: nil);
}
tabbar切換動(dòng)畫

下面是小魚兒推薦應(yīng)用環(huán)節(jié)

mac效率軟件Alfred述暂,讓你慢慢丟失鼠標(biāo),讓你工作效率翻倍建炫。密碼為xclient.info

image.png

你懂的

傳送門

你的關(guān)注和喜歡是七秒前進(jìn)的動(dòng)力

最后編輯于
?著作權(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ō)我怎么就攤上這事期虾≡” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵镶苞,是天一觀的道長(zhǎng)喳坠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)茂蚓,這世上最難降的妖魔是什么壕鹉? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮聋涨,結(jié)果婚禮上晾浴,老公的妹妹穿的比我還像新娘。我一直安慰自己牍白,他們只是感情好脊凰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茂腥,像睡著了一般狸涌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上最岗,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天帕胆,我揣著相機(jī)與錄音,去河邊找鬼仑性。 笑死惶楼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诊杆。 我是一名探鬼主播歼捐,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晨汹!你這毒婦竟也來(lái)了豹储?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤淘这,失蹤者是張志新(化名)和其女友劉穎剥扣,沒想到半個(gè)月后巩剖,有當(dāng)?shù)厝嗽跇淞掷锇l(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
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望街夭。 院中可真熱鬧音婶,春花似錦、人聲如沸莱坎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)檐什。三九已至,卻和暖如春弱卡,著一層夾襖步出監(jiān)牢的瞬間乃正,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工婶博, 沒想到剛下飛機(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)容

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果传睹,實(shí)現(xiàn)這些動(dòng)畫的過(guò)程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫全貌岸晦。在這里你可以看...
    每天刷兩次牙閱讀 8,465評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果欧啤,實(shí)現(xiàn)這些動(dòng)畫的過(guò)程并不復(fù)雜睛藻,今天將帶大家一窺iOS動(dòng)畫全貌。在這里你可以看...
    F麥子閱讀 5,094評(píng)論 5 13
  • 書寫的很好邢隧,翻譯的也棒店印!感謝譯者,感謝感謝倒慧! iOS-Core-Animation-Advanced-Techni...
    錢噓噓閱讀 2,292評(píng)論 0 6
  • 本文轉(zhuǎn)載自:http://www.cocoachina.com/ios/20150104/10814.html ...
    idiot_lin閱讀 1,553評(píng)論 0 11
  • 自從知道潘俊跟英語(yǔ)談戀愛的事情之后按摘,年級(jí)中涌現(xiàn)出了一大片與英語(yǔ)相愛的同學(xué)。潘俊看到他們也跟他一樣努力與英語(yǔ)相處感到...
    思彤lu閱讀 147評(píng)論 0 0