Как сделать эффект виньетки на iOS? - PullRequest
5 голосов
/ 30 ноября 2011

Когда появляется UIAlertViews, на заднем плане появляется эффект виньетки. То есть края темнее, а центр светлее.

vignette iOS

Мне было интересно, был ли этот эффект виньетки встроен в Cocoa Touch. Я хотел бы показать виньетку за одним из моих пользовательских видов.

Ответы [ 5 ]

2 голосов
/ 03 февраля 2013

Создайте класс с именем VignetteEffect в качестве подкласса UIView

Добавьте этот код к вашему -drawRect: методу:

- (void)drawRect:(CGRect)rect
{

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGColorSpaceRef colSp = CGColorSpaceCreateDeviceRGB();

    CGGradientRef gradient = CGGradientCreateWithColors(colSp, (__bridge CFArrayRef)[NSArray arrayWithObjects:(id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:0] CGColor], (id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5] CGColor], nil], 0);

    CGContextDrawRadialGradient(context, gradient, self.center, 0, self.center, self.frame.size.height+self.frame.size.height/4, 0);

    CGColorSpaceRelease(colSp);
    CGGradientRelease(gradient);

}

Настройте значения по своему вкусу.

Добавьте его к любому просмотру. И вуаля. Хороший эффект виньетки.

2 голосов
/ 30 ноября 2011

На самом деле этот эффект достигается за счет дополнительного изображения - под окном uialertview отображается отдельное окно с изображением.Это окно делает его таким, что вы не можете выбрать или коснуться любых других видов.Если вы хотите это изображение, оно может быть найдено прямо здесь

2 голосов
/ 30 ноября 2011

Это встроено в UIKit (поскольку UIAlertView является частью UIKit), но оно не является общедоступным.

Хотя создать тот же эффект не должно быть слишком сложно.Это просто радиальный градиент, который вы можете нарисовать в коде или Photoshop.

ОБНОВЛЕНИЕ: Если вы должны знать, фон является классом с именем _UIAlertNormalizingOverlayWindow сследующая иерархия классов:

_UIAlertNormalizingOverlayWindow
_UIAlertOverlayWindow
UIWindow
1 голос
/ 04 октября 2012

Я оспариваю выбранный ответ неверный и потенциально опасный.Вот мое решение:

Я скопировал код рисования градиента из SVProgressHud в мой форк SSGradientView:

SSGradientView *vignette = [SSGradientView new];
vignette.frame = [UIScreen mainScreen].currentBounds;
vignette.backgroundColor = [UIColor clearColor];
vignette.direction = SSGradientViewDirectionRadial;
UIColor *startColor = // We just need the colorspace.
UIColor *endColor = // Visible vignette color.
vignette.colors = @[
[startColor colorWithAlphaComponent:0.0f], 
[endColor colorWithAlphaComponent:1.0f] ];
vignette.locations = @[ @0.4f, @1.0f ];
[view insertSubview:vignette atIndex:0]; // Or equivalent.
1 голос
/ 30 ноября 2011

SVProgressHud делает этот тип эффекта, посмотрите код, в котором подробно описан SVProgressHUDMaskTypeGradient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...