Генерация изображения из UIView с настройками затенения - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь сгенерировать UIImage как снимок UIView.

    CGFloat length = 100;
    CGFloat radius = 20;

    self.bgView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, length, length)];
    self.bgView.backgroundColor = [UIColor whiteColor];
    self.bgView.layer.cornerRadius = 5;
    self.bgView.layer.shadowRadius = radius;
    self.bgView.layer.shadowOpacity = 0.95;
    self.bgView.layer.shadowColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.5].CGColor;

    [self.view addSubview:self.bgView];

    CGFloat contextLength = length + radius * 2;
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(contextLength, contextLength), NO, 0.0);
    CGContextTranslateCTM(UIGraphicsGetCurrentContext(), radius, radius);
    [self.bgView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    self.secondBgView = [[UIImageView alloc] initWithFrame:CGRectMake(80, 260, contextLength, contextLength)];
    self.secondBgView.image = image;
    [self.view addSubview:self.secondBgView];

Однако теневая часть сгенерированного изображения размыта.

snapshot

Как получить четкое изображение так же, как первое?

1 Ответ

0 голосов
/ 14 июня 2019

После копания проекта https://github.com/uber/ios-snapshot-test-case я нахожу, что drawViewHierarchyInRect:drawViewHierarchyInRect: UIView работает.

UIView *wrapperView = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 320, 150)];
[wrapperView addSubview:self.bgView];
[self.view addSubview:wrapperView];

// ...

[wrapperView drawViewHierarchyInRect:wrapperView.bounds afterScreenUpdates:YES];
...