這是2023年3月的新加入的ios動畫,你可能從來沒有聽說過careplicatorlayer,那是乙個很酷難以理解但強大的coreanimation類。
先上效果圖
20行**建立動畫,直接上**
/** careplicatorlayer可以複製自己子層的layer,並且複製的出來的layer和原來的子layer擁有相同的動效*/
careplicatorlayer *replicatorlayer = [careplicatorlayer layer];
replicatorlayer.bounds = cgrectmake(0.0,0.0,100.0,100.0);
replicatorlayer.cornerradius = 10.0;
/** 檢視相對于父檢視的重心位置*/
replicatorlayer.position = self.center;
replicatorlayer.backgroundcolor = [uicolor colorwithred:0.1 green:0.1 blue:0.1 alpha:0.1].cgcolor;
[self.layer addsublayer:replicatorlayer];
calayer *dot = [calayer layer];
dot.bounds = cgrectmake(0, 0, 10, 10);
dot.position = cgpointmake(50, 20);
dot.backgroundcolor = [uicolor colorwithred:0.1 green:0.1 blue:0.1 alpha:0.6].cgcolor;
dot.cornerradius = 5;
dot.maskstobounds = yes;
[replicatorlayer addsublayer:dot];
cgfloat count = 10.0;
replicatorlayer.instancecount = count; //小圓圈的個數
cgfloat nrdots = 2 * m_pi/count;
replicatorlayer.instancetransform = catransform3dmakerotation(nrdots, 0, 0, 1); //每次旋轉的角度等於2π/ 10
cabasicanimation *animation = [cabasicanimation animationwithkeypath:@"transform.scale"];
animation.duration = 1; //1秒的延遲動畫。在到原來的點上做縮放變化
animation.fromvalue = @(1);
animation.tovalue = @(0.1);
animation.repeatcount = maxfloat;
[dot addanimation:animation forkey:nil];
replicatorlayer.instancedelay = 1.0/count; //使動畫動起來的秘訣就是給出一點延遲到每乙個副本
dot.transform = catransform3dmakescale(0.01, 0.01, 0.01); //解決旋轉銜接效果
複製**
AspectJ基於xml和基於註解
一 基於xml 執行的切入點中具體方法有返回值,則方法結束會立即執行後置通知,然後再執行環繞通知的放行之後的 2 連線點即所有可能的方法,切入點是正真被切的方法,連線點方法名 其中,只有環繞通知的切入點引數不一樣,是可以放行的切入點 3 異常通知是處理異常 切面類中的異常通知的方法引數列表中異常引數...
拓撲排序(基於dfs 基於佇列)
dfs函式的返回值表示是否成環,若存在有向環,則不存在拓撲排序。不包含有向環的有向圖稱為有向無環圖 dag 可以借助dfs完成拓撲排序,在訪問完乙個結點時把他加入當前拓撲序的首部。舉個栗子 比如乙個 1,2 1,3 2,3 的有向無環圖,就先搜尋1,再遞迴搜尋2,再搜尋3,3沒有出度了,於是放進拓撲...
基於insert update delete的注入
inset注入原理 所謂inset注入就是指我們前端註冊的資訊會被後台通過insert操作插入到資料庫裡邊去,若此時後台沒有做出相應的處理就會構成insert注入。insert注入方法 insert用法例如 insert into member username,pw,phonenum,email,...