С этого сайта, кажется, вы хотите границу с тенью. Есть 2 разумных варианта, 3, если тебя не волнует тень.
Если вас не волнует тень, вы можете просто сделать что-то вроде
#import <QuartzCore/QuartzCore.h> // this should be at the top
// inside your view layout code
myImageView.layer.borderColor = [UIColor whiteColor].CGColor
myImageView.layer.borderWidth = 5;
Это даст вам 5-пиксельную белую рамку, вставленную в вид, наслоенную поверх содержимого вида (например, изображение). То, что вам не дадут, это тень. Если вы хотите тень, есть 2 других варианта.
Вы можете просто создать изображение, которое включает в себя границу и тень, и ничего больше. Просто сделайте все остальное альфа-прозрачным. Затем вы можете просто наложить это изображение поверх того, которое вы хотите отобразить (либо с двумя изображениями, либо создав третье изображение из двух). Это должно работать нормально, но не будет масштабироваться до разных размеров изображения. В случае связанного приложения размер изображения всегда одинаков, поэтому они могут использовать это.
Другой вариант - просто нарисовать границу и тень поверх вашего изображения на новом изображении. Вот небольшой пример кода, который сделает это - он создает новое изображение того же размера, что и ваш оригинал, но с белой затененной рамкой:
- (UIImage *)borderedImage:(UIImage *)image {
// the following NO means the new image has an alpha channel
// If you know the source image is fully-opaque, you may want to set that to YES
UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
[image drawAtPoint:CGPointZero];
CGContextRef ctx = UIGraphicsGetCurrentContext();
const CGFloat shadowRadius = 5;
CGContextSetShadowWithColor(ctx, 0, shadowRadius, [UIColor blackColor].CGColor);
[[UIColor whiteColor] set];
CGRect rect = (CGRect){CGPointZero, image.size};
const CGFloat frameWidth = 5;
rect = CGRectInset(rect, frameWidth / 2.0f, frameWidth / 2.0f);
UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect];
path.lineWidth = frameWidth;
[path stroke];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// note: getting the new image this way throws away the orientation data from the original
// You could create a third image by doing something like
// newImage = [UIImage imageWithCGImage:newImage.CGImage scale:newImage.scale orientation:image.orientation]
// but I am unsure as to how orientation actually affects rendering (if at all)
UIGraphicsEndImageContext();
return newImage;
}
(примечание: этот код не был скомпилирован и может содержать ошибки)