2011-05-13 22 views
6

我知道我的問題的標題是如此糟糕,但我不知道如何描述它。iphone - 焦點效果(就像UIAlertView)

當UIAlertView彈出時,屏幕上的其他內容(UIAlertView除外)變得有點暗,但可以看到。我將其稱爲聚焦效果,因爲您將清楚直接地知道現在UIAlertView是關注焦點。

那麼我該如何實現這種焦點效果呢?

謝謝

回答

4

只需在要「關注」的視圖下方添加半透明視圖即可。 簡單的例子:

UIView *shieldView = [[[UIView alloc] initWithFrame:myView.bounds] autorelease]; 
shieldView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.7]; 
[myView.superview insertSubview:shieldView belowSubview:myView]; 

UIAlertView實際上使用的圖像具有徑向梯度,而不是一個簡單的顏色,以突出所述視圖的中心。

+0

我試過了,但它看起來確實不是很好:( – Jack 2011-05-13 09:34:08

+1

「不好」是什麼意思?正如我所說的,這個例子很簡單編輯。在真實世界的應用程序中,您很可能會添加淡入/淡出動畫,並使用漸變圖像而不是簡單的顏色... – omz 2011-05-13 09:37:29

+0

我認爲我應該首先爲shieldView創建淡入/淡出動畫,然後彈出注重我的觀點? – Jack 2011-05-13 09:41:02

2

UIAlertView的工作原理是這樣的。它會淡入Alpha遮罩圖像中以淡化背景。一旦動畫完成,它就開始對話框的「跳動」動畫。

所以要重現它,您需要首先生成一個帶有「亮點」的alpha遮罩,其中的對話框將最終放入並淡入。然後使用(幾個)幀動畫獲得反彈效果。

此處瞭解詳情:Creating a Pop animation similar to the presentation of UIAlertView

+0

我猜UIAlertView在面具圖像開始變暗動畫的同時被彈出,只是動畫的持續時間相當於0.3秒? – Jack 2011-05-13 09:53:00

+0

我從來沒有真正計時蘋果的東西。如果你谷歌,你會發現有人。我只是想給你你需要重現它的基本概念。要麼創建一個徑向模糊的圖像,通過模擬器上的變換權限進行扭曲並保存,或使用gimp或photoshop。時機是在你和CoreAnimation之間;-)順便說一句,這不僅僅是猜測,我已經寫了代碼來做到這一點,但它是爲客戶,所以不能分享! – idz 2011-05-13 10:13:08

0

,使其更好地比「不好說」 Could you ...

  1. 創建一個筆尖一個UIView(最簡單的,如果你的代碼的一部分,你需要效果已經在使用一個筆尖),然後在該視圖中添加一個半透明圖形(帶有「焦點」效果)。

  2. 在筆尖連接的UIView到圖形一個IBOutlet

  3. 褪色使用動畫到視圖層級(OMZ示例顯示了此)

4

我知道此信息是有點老但我認爲這可能有助於某人。

使用此代碼來生成徑向漸變背景:

- (UIImage *)radialGradientImage:(CGSize)size start:(float)start end:(float)end centre:(CGPoint)centre radius:(float)radius{ 
UIGraphicsBeginImageContextWithOptions(size, YES, 1); 

size_t count = 2; 
CGFloat locations[2] = {0.0, 1.0}; 
CGFloat components[8] = {start, start, start, 1.0, end, end, end, 1.0}; 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGGradientRef grad = CGGradientCreateWithColorComponents (colorSpace, components, locations, count); 
CGColorSpaceRelease(colorSpace); 

CGContextDrawRadialGradient (UIGraphicsGetCurrentContext(), grad, centre, 0, centre, radius, kCGGradientDrawsAfterEndLocation); 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

CGGradientRelease(grad); 
UIGraphicsEndImageContext(); 
return image;} 

定義梯度.h文件中像這樣:

UIImageView *gradient; 

打電話給你的梯度像這樣:

- (void)addGradient{ 
CGSize size = self.view.bounds.size; 
CGPoint centre = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2); 

float startColor = 1.0f; 
float endColor = 0.0f; 
float radius = MIN(self.view.bounds.size.width/4, self.view.bounds.size.height/4); 

gradient = [[UIImageView alloc] initWithImage:[self radialGradientImage:size 
                    start:startColor 
                    end:endColor 
                   centre:centre 
                   radius:radius]]; 

[gradient setBackgroundColor:[UIColor clearColor]]; 
[gradient setUserInteractionEnabled:YES]; 
[gradient setAlpha:0.6f]; 
[self.view addSubview:gradient];} 
+0

這看起來更像一個球體.. – 2013-05-30 16:18:48

+0

我發現,如果你做浮動半徑= MIN(self.view.bounds.size.width,self.view.bounds.size.height); 它看起來好多了。 – 2013-05-30 16:34:15