Iphone - Как я могу создать изображение с закругленным углом и тенью?
![enter image description here]()
что-то вроде выше?
Я знаю, как создать округленный угол:
imageView.layer.cornerRadius = 10;
imageView.layer.shouldRasterize = YES;
imageView.layer.masksToBounds = YES;
Для тени я пробовал
imageView.layer.shadowOffset = CGSizeMake(1, 1);
imageView.layer.shadowRadius = 5;
imageView.layer.shadowOpacity = 0.4;
imageView.layer.shadowColor = [UIColor blackColor].CGColor;
imageView.layer.shouldRasterize = YES;
Но imageView.layer.masksToBounds = YES;
из закругленного угла убивает тень.
Другой вопрос заключается в том, как создать тень, точно такую же, как показано на изображении? Я создал этот образ в фотошопе, я использовал 120 градусов в качестве направления света. Но если бы я использовал вышеприведенный код и отключил maskToBounds, я вижу тень, и это уродливо.
Или я могу создать рамку с закругленным углом + теневое изображение в фотошопе и применить кадр к каждому изображению в своем приложении? Я думаю, что это даст лучшую производительность. затенение и поворот изображений на лету будет иметь ужасную производительность, если все изображения находятся в прокрутке.
Спасибо
Ответы
Ответ 1
Попробуйте следующее:
CALayer *sublayer = [CALayer layer];
sublayer.backgroundColor = [UIColor blueColor].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 0.8;
sublayer.frame = CGRectMake(30, 30, 128, 192);
sublayer.borderColor = [UIColor blackColor].CGColor;
sublayer.borderWidth = 2.0;
sublayer.cornerRadius = 10.0;
[self.view.layer addSublayer:sublayer];
CALayer *imageLayer = [CALayer layer];
imageLayer.frame = sublayer.bounds;
imageLayer.cornerRadius = 10.0;
imageLayer.contents = (id) [UIImage imageNamed:@"BattleMapSplashScreen.jpg"].CGImage;
imageLayer.masksToBounds = YES;
[sublayer addSublayer:imageLayer];
И посмотрите исходный источник
Ответ 2
Я бы использовал два изображения. Фон png, который имеет тень (может быть повторно использован для каждого изображения) и переднее png-изображение с закругленными углами.
Ответ 3
Возможно, вы захотите использовать другой слой для теневого копирования и сохранить свой masksToBounds
и округлять код. В этом примере imageView
- это имя изображения, которое вы хотите затенять и округлить:
CALayer *shadowLayer = [[[CALayer alloc] init] autorelease];
sublayer.frame = imageView.bounds;
sublayer.masksToBounds = NO;
sublayer.shadowOffset = CGSizeMake(1, 1);
sublayer.shadowRadius = 5;
sublayer.shadowOpacity = 0.4;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shouldRasterize = YES;
[imageView.layer insertSublayer:shadowLayer atIndex:0]; // Put it underneath the image
Это должно дать вам тень. Теперь, чтобы избежать медленного пересчета, я предлагаю создать UIImage
из изображения. См. Эту ссылку: Создайте UIImage из теневого вида, сохраняя альфа?.
Надеюсь, это поможет!