我知道我的問題的標題是如此糟糕,但我不知道如何描述它。iphone - 焦點效果(就像UIAlertView)
當UIAlertView彈出時,屏幕上的其他內容(UIAlertView除外)變得有點暗,但可以看到。我將其稱爲聚焦效果,因爲您將清楚直接地知道現在UIAlertView是關注焦點。
那麼我該如何實現這種焦點效果呢?
謝謝
我知道我的問題的標題是如此糟糕,但我不知道如何描述它。iphone - 焦點效果(就像UIAlertView)
當UIAlertView彈出時,屏幕上的其他內容(UIAlertView除外)變得有點暗,但可以看到。我將其稱爲聚焦效果,因爲您將清楚直接地知道現在UIAlertView是關注焦點。
那麼我該如何實現這種焦點效果呢?
謝謝
只需在要「關注」的視圖下方添加半透明視圖即可。 簡單的例子:
UIView *shieldView = [[[UIView alloc] initWithFrame:myView.bounds] autorelease];
shieldView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.7];
[myView.superview insertSubview:shieldView belowSubview:myView];
UIAlertView
實際上使用的圖像具有徑向梯度,而不是一個簡單的顏色,以突出所述視圖的中心。
UIAlertView
的工作原理是這樣的。它會淡入Alpha遮罩圖像中以淡化背景。一旦動畫完成,它就開始對話框的「跳動」動畫。
所以要重現它,您需要首先生成一個帶有「亮點」的alpha遮罩,其中的對話框將最終放入並淡入。然後使用(幾個)幀動畫獲得反彈效果。
此處瞭解詳情:Creating a Pop animation similar to the presentation of UIAlertView
,使其更好地比「不好說」 Could you ...
創建一個筆尖一個UIView(最簡單的,如果你的代碼的一部分,你需要效果已經在使用一個筆尖),然後在該視圖中添加一個半透明圖形(帶有「焦點」效果)。
在筆尖連接的UIView到圖形一個IBOutlet
褪色使用動畫到視圖層級(OMZ示例顯示了此)
我知道此信息是有點老但我認爲這可能有助於某人。
使用此代碼來生成徑向漸變背景:
- (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];}
這看起來更像一個球體.. – 2013-05-30 16:18:48
我發現,如果你做浮動半徑= MIN(self.view.bounds.size.width,self.view.bounds.size.height); 它看起來好多了。 – 2013-05-30 16:34:15
我試過了,但它看起來確實不是很好:( – Jack 2011-05-13 09:34:08
「不好」是什麼意思?正如我所說的,這個例子很簡單編輯。在真實世界的應用程序中,您很可能會添加淡入/淡出動畫,並使用漸變圖像而不是簡單的顏色... – omz 2011-05-13 09:37:29
我認爲我應該首先爲shieldView創建淡入/淡出動畫,然後彈出注重我的觀點? – Jack 2011-05-13 09:41:02