思路:
方法 建立乙個圖層,圖層要求圓形,可傳引數顏色、大小
方法 給圖層設定位置和整個載入動畫的大小
之後給其新增動畫,並且注意動畫的begintime要有間距
建立layer
func createlayerwith(size:cgsize,color:uicolor) -> calayer{
let layer:cashapelayer = cashapelayer()
let path:uibezierpath = uibezierpath()
//addarcwithcenter,就是根據中心點畫圓
center:cgpoint 中心點
radius:cgfloat 半徑
startangle:cgfloat 開始的弧度
endangle:cgfloat 結束的弧度
clockwise:bool 繪圖方向 true:順時針 false:逆時針
path.addarcwithcenter(cgpointmake(size.width/2, size.height/2), radius: size.width/2, startangle: 0, endangle: cgfloat(2*m_pi), clockwise: false)
layer.linewidth = 2
layer.fillcolor = color.cgcolor
layer.backgroundcolor = nil
layer.path = path.cgpath
return layer
根據傳入引數,角度angle也就是每個圓對於圓心的角度,size就是小圓的半徑,origin載入動畫中心所在的位置,containersize載入動畫的尺寸,和顏色
func createcircle(angle:cgfloat, size:cgfloat,origin:cgpoint,containersize:cgsize,color:uicolor)->calayer{
let radius = containersize.width/2
let circle = createlayerwith(cgsizemake(size, size), color: color)
let frame = cgrectmake(origin.x+radius*(cos(angle)+1)-size/2, origin.y+radius*(sin(angle)+1)-size/2, size, size)
circle.frame = frame
return circle
以下是設定動畫的過程,建立動畫組
let scaleanimation = cakeyframeanimation.init(keypath: "transform.scale")
//該屬性用以制定每個子路徑的時間
scaleanimation.keytimes = [0,0.5,1]
//關鍵幀點
scaleanimation.values = [1,0.4,1]
scaleanimation.duration = 1
let opacityanimation = cakeyframeanimation.init(keypath: "opacity")
opacityanimation.keytimes = [0,0.5,1]
opacityanimation.values = [1,0.3,1]
opacityanimation.duration = 1
let animation = caanimationgroup()
animation.animations = [scaleanimation,opacityanimation]
animation.duration = 1
animation.repeatcount = huge
animation.removedoncompletion = false
for index in 0...7{
let circle = createcircle(cgfloat(m_pi_4*double(index)), size: 10, origin: cgpointmake(50, 50), containersize: cgsizemake(50, 50), color: uicolor.redcolor())
animation.begintime = double(index)*0.125
circle.addanimation(animation, forkey: "animation")
self.view.layer.addsublayer(circle)
效果圖:
實現乙個Semaphore
其實這是我boss的想法,我一開始聽他這麼說也覺得比較差異,ms已經寫好了何必再自己寫乙個.答案有兩個 1ms寫的東西未必就是最好的,如完成埠,heap等.2semaphore是多執行緒程式設計中的核心元素所以有必要提速.我們都知道在多執行緒中ms提供的多個現成阻塞核心物件中critical mon...
乙個Redis Cache實現
應用中需要通過http呼叫遠端的資料,但是這個獲取過程需要執行較長時間,而且這個資料本身的變化也不頻繁,這種情況最適合用乙個cache來優化。前兩年在做短鏈結實現的時候,曾經用最好的語言php做過乙個redis cache實現 乙個簡單的redis應用 修訂版 但那個畢竟是乙個特定的實現,而且我現在...
實現乙個call
call是js最好用的函式之一,改變函式上下文是外掛程式編寫最經常使用的特性。var name 小鋼炮 var cat function say name say ketty 小鋼炮 ketty say.call cat,ketty 貓 ketty看下面 function say name var ...