iphone - Как я могу создать изображение с закругленным углом и тенью? - PullRequest
10 голосов
/ 09 ноября 2011

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, я могу видеть тень, и она выглядит ужасно.

Или я могу создать скругленный угол + рамку тени в фотошопе и применить эту рамку ккаждое изображение в моем приложении? Я думаю, что это даст лучшую производительность.Затенение и поворот изображений на лету будет иметь ужасную производительность, если все изображения находятся на свитке.

Спасибо

Ответы [ 3 ]

4 голосов
/ 09 ноября 2011

Попробуйте это:

 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];

И взгляните на оригинальный источник

0 голосов
/ 16 ноября 2011

Возможно, вы хотите использовать другой слой для затенения, а сохранить ваш 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 из теневого вида, сохраняя при этом альфа? .

Надеюсь, это поможет!

0 голосов
/ 09 ноября 2011

Я бы использовал два вида изображения. Фон png с тенью (может быть повторно использован для каждого изображения) и передним планом png с закругленными углами.

...