2012-12-31 110 views
17

我想知道如何在地圖上實現藍色球與當前位置的脈動環,但沒有mapview。IOS動畫脈衝圈如地圖上的藍色球

基本上我想知道在正常UIView(或我的自定義視圖)上有一個帶有脈動環的藍色球的最佳方式,無論用戶何時觸摸屏幕,該觸摸都是藍色球的中心。

我有兩個想法,首先我可以實現一個動畫,但我無法做到,但它可能是可能的。 第二,我可以得到一系列圖像,例如gif,並在用戶觸摸的任何地方顯示。

哪一個是最好的選擇?還是有更好的選擇?

謝謝。

回答

44

試試這個:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 100, 100)]; 
view.backgroundColor = [UIColor blueColor]; 
view.layer.cornerRadius = 50; 

[self.view addSubview:view]; 

CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
scaleAnimation.duration = 0.2; 
scaleAnimation.repeatCount = HUGE_VAL; 
scaleAnimation.autoreverses = YES; 
scaleAnimation.fromValue = [NSNumber numberWithFloat:1.2]; 
scaleAnimation.toValue = [NSNumber numberWithFloat:0.8]; 

[view.layer addAnimation:scaleAnimation forKey:@"scale"]; 

設置參數,只要你喜歡,修改的效果。

編輯:

您必須添加QuartzCore框架,包括<QuartzCore/QuartzCore.h>這個工作。

+1

非常感謝你,這解決了我所有的問題。 我不知道layer有那個cornerRadius屬性。 –

+0

我該如何接受=)。 對不起,這裏從來沒有問過太多,只是搜索了人們已經發布的內容。 –

+0

還有一件事,如果我想使弧不完全完成? 從0到PI? 我確實設法使用CGContextAddArc來做到這一點,但我無法設置邊框寬度。 剛剛發現我自己=),無論如何,謝謝。 答案:CGContextSetLineWidth –

1

以編程方式執行動畫而不是使用圖像序列是更好的方法(並且它也是Apple如何做的)。它具有許多優點,尤其是性能要好得多(您的圖像序列動畫不可能在60FPS下運行!)。

您可以通過多種方式實現此動畫:最簡單的方法是在圖像編輯器中創建環形圖形,然後創建一個可用於保存該動畫的圖形。然後,您可以簡單地對視圖的比例,alpha和幀屬性(確保您的圖像視圖設置爲按比例調整圖像大小)進行動畫處理。爲確保您的動畫動畫無限重複,您可以設置UIView動畫重複屬性。你的中央'藍色球'可以是一個單獨的UIImageView覆蓋頂部。

UIView動畫非常簡單,蘋果有很多示例代碼可以幫助你。你只需將你在動畫塊中動畫的屬性以及動畫參數(持續時間,重複等)放在一起,iOS就會完成剩下的動作。在StackOverflow上搜索'UIView動畫'會給你很多很多的問題,可能會有所幫助。

16

嘗試一下本作SWIFT

let view:UIView = UIView(frame: CGRectMake(200, 200, 100, 100)) 
view.layer.cornerRadius = 50 
view.backgroundColor = UIColor.blueColor() 

self.view.addSubview(view) 

let scaleAnimation:CABasicAnimation = CABasicAnimation(keyPath: "transform.scale") 

scaleAnimation.duration = 0.5 
scaleAnimation.repeatCount = 30.0 
scaleAnimation.autoreverses = true 
scaleAnimation.fromValue = 1.2; 
scaleAnimation.toValue = 0.8; 

view.layer.addAnimation(scaleAnimation, forKey: "scale") 
+0

scaleAnimation.repeatCount = 30.0只會重複動畫30次迭代。使用scaleAnimation.repeatCount = HUGE使動畫無限期地重複。 – leafcutter