最近做了乙個用swift寫的送禮動畫,這個動畫本來是在專案中用到的,然後專案改了需求用不上了就想到用swift封裝一下以後如果用得到可以借鑑下。 想看下效果圖:
####思路 1.首先建立乙個動畫的資料model。
struct animationmodel
iflet giftname = dict["giftname"]
iflet giftnum = int(dict["giftnum"] ?? "0")
iflet giftheadimage = dict["giftheadimage"]
iflet giftusername = dict["giftusername"]
}}複製**
2.自定義乙個動畫檢視,這個檢視自己控制乙個禮物數量的動畫。
class animationlabel: uiview
}lazy var headview: uiimageview = ()
lazy var labelname: uilabel = ()
lazy var labelgift: uilabel = ()
lazy var labelcount: uilabel = ()
lazy var giftimageview: uiimageview = ()
override init(frame: cgrect)
required init?(coder adecoder: nscoder)
}複製**
3.禮物數量放大縮小的動畫通過定時器來控制,用禮物的總數量來除乙個數,這個數是每次禮物數量放大縮小動畫完成後疊加的數量,知道疊加的數量等於送禮的總數量就停止動畫。並且從父檢視上移除。
extension animationlabel
func getlabeview(frame:cgrect, title:string) -> uilabel
//開始禮物數量的動畫
func starttimer
()
func stoptimer
()
@objc func mystartanimation
(), completion: )
}uiview.animatekeyframes(withduration: 0.25, delay: 0, options: .allowuserinteraction, animations: )
uiview.addkeyframe(withrelativestarttime: 0.5, relativeduration: 0.5, animations: )
}) , completion: )}}
}複製**
4.自定義的檢視完成後,在來考慮從左平移過來和往上平移的動畫。從左平移直接用uiview的動畫就可以完成,然後在往上平移這裡喔考慮的是用scrollview的contentoffset來控制。每次新增乙個禮物檢視後往上平移乙個固定的offset,然後下乙個檢視加進來的時候就它的y值就加上這個固定的offset。
class sendgiftanimationscrollview: uiscrollview
required init?(coder adecoder: nscoder)
func addanimationlabel(dict: [string:string])
private func addanimationview(sender:animationlabel) )
self.numheight! += margin
}}複製**
5.最後看下呼叫
var scrollview: sendgiftanimationscrollview?
override func viewdidload
()
override func touchesbegan(_ touches: set, with event: uievent?)
複製**
送禮物 題解
這道題目是到毒瘤題。首先我們至少去l個,所以我們可以把小於l的用單調佇列直接求出。對取l r個。顯而易見的是左右兩端必分別是這個區間的最小值和最大值。我們可以用01分數規劃。不放令結果最後為ans,則有 a j ans j a i ans i ans k 所以我們就可以愉快地分數規劃啦。includ...
送禮物 雙向dfs
思路 dfs 先把a陣列排序,由大變小 dfs出前n 2 2 可以湊出的數,放到陣列s中 把s陣列去重排序,行成乙個單調遞增序列 再dfs剩下的數 可以組成的數,每組成乙個,二分找s陣列匹配的最大值 include includeusing namespace std typedef long lo...
雙向DFS 送禮物
達達幫翰翰給女生送禮物,翰翰一共準備了n個禮物,其中第i個禮物的重量是g i 達達的力氣很大,他一次可以搬動重量之和不超過w的任意多個物品。達達希望一次搬掉盡量重的一些物品,請你告訴達達在他的力氣範圍內一次效能搬動的最大重量是多少。輸入格式 第一行兩個整數,分別代表w和n。以後n行,每行乙個正整數表...