iOS 雪花動畫

2022-03-14 14:23:08 字數 2548 閱讀 1892

隨機數方法

arc4random()  //[0,2^32-1]; 

隨機數宣告

unsigned int randomnum=arc4random()% 320;

int i = randomnum ;

其中,unsigned 沒有標記的 指的是只有正數,說明randomnum是正數

其中 arc4random() 的括號絕對不可以忘掉

隨機數也可以直接用

snowview.frame = cgrectmake(arc4random() % 320 , 480-snowview.frame.size.height,snowview.frame.size.width, snowview.frame.size.height);

關於隨機數的意外?

即使是在證明的時候不用unsigned,在使用時仍然是只有正數出現

但是如果在後面的使用過程中對randomnum進行求餘運算,最後就會出現負值

這真是乙個奇怪的現象

比如說for (int a=0; a<60; a++) {

int randomnum=arc4random();

int i=randomnum%320;

nslog(@"--------->>arc4random()為%d",arc4random()%320);

nslog(@"--------->>randomnum為%d",i);

在寫了這樣的**之後,輸出的arc4random()為後面一直都是正數,而randomnum為後面就有負數出現

這到底是為什麼呢?

答案:    

for (int a=0; a<60; a++) 

int randomnum=arc4random();

int i=randomnum%320;

nslog(@"--------->>arc4random()為%d",arc4random()%320);

nslog(@"--------->>randomnum為%d",i);

在這段**中,這裡的int是有符號的32位,而arc4random()是無符號的32位,比int大很多,賦給int型別的變數時,超過int範圍的隨機數,第乙個  1   會被當成符號(即負號)來看待,所以會出現負數

對范珍老師的崇拜如滔滔江水源源不絕,這老師太牛了,簡直是無所不能啊

通過動畫塊傳引數

[uiview beginanimations:nil context:(__bridge void*)snowview];

[uiview setanimationduration:6];

[uiview setanimationdelegate:self];

snowview.center=cgpointmake(arc4random()%320, 475);

[uiview commitanimations];

這裡,context後面的引數是 void* 型別,貌似是c裡面的?,所以需要橋接強制轉換,bridge關鍵字可以使不同語言之間的變數相互轉換

這裡,動畫塊中使用了delegate之後,動畫結束之後就會自動呼叫didstop方法

下面是系統提供的didstop方法

-(void)animationdidstop:(nsstring *)animationid finished:(nsnumber *)finished context:(void *)context

//snow melt

uiimageview *snowview=(__bridge uiimageview*)context;

[uiview beginanimations:nil context:(__bridge void*)snowview];

[uiview setanimationduration:1];

[uiview setanimationdelegate:self];

[uiview setanimationdidstopselector:@selector(reanimationdidstop:finished:context:)];

snowview.alpha=0.1;

[uiview commitanimations];

這裡,引數有三個,暫時不用寫,而context後面的context代表的就是snowview,但是context是c語言中的,所以需要再次轉換一下

區分兩個動畫塊

因為只要動畫塊使用delegate,結束之後就會自動去呼叫didstop方法,所以,如果有兩個動畫塊,而只有乙個didstop方法,那麼兩個動畫塊結束之後都會去呼叫哪個方法,為了使不同的動畫塊結束之後進行不同的後續操作,需要給動畫塊命名,然後再didstop語句中用if判斷動畫塊的名字,然後執行相應操作

下面,給動畫塊命名的**

[uiview beginanimations:@"snowdown" context:(__bridge void *)(snowview)];

判斷動畫塊名字的**

if ([animationid isequaltostring:@"snowdown"])

這裡的animationid指的就是來呼叫這個didstop方法的動畫塊的名字

iOS 雪花動畫與跑馬燈

跑馬燈效果演示 void viewdidload uilabel createlabelwithtext nsstring text textcolor uicolor textcolor uilabel label uilabel alloc initwithframe cgrectmake 0,...

雪花雪花雪花

e.雪花雪花雪花 記憶體限制 256 mib 時間限制 1000 ms 標準輸入輸出 題目型別 傳統 評測方式 文字比較 題目描述 有n片雪花,每片雪花由六個角組成,每個角都有長度。第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,ai,6。因為雪花的形狀是封閉的環形,所以從任何乙...

iOS 動畫 UIView動畫

viewcontroller.m ui 23 動畫 import viewcontroller.h inte ce viewcontroller property strong,nonatomic iboutlet uiview opeview1 property strong,nonatomic ...