Хорошо, уже есть принятый ответ, но я думаю, что есть лучший способ сделать это, вам просто нужно создать новый слой немного больше, чем ваше представление, и не маскировать его до границ слоя представления (что на самом деле поведение по умолчанию). Вот пример кода:
CALayer * externalBorder = [CALayer layer];
externalBorder.frame = CGRectMake(-1, -1, myView.frame.size.width+2, myView.frame.size.height+2);
externalBorder.borderColor = [UIColor blackColor].CGColor;
externalBorder.borderWidth = 1.0;
[myView.layer addSublayer:externalBorder];
myView.layer.masksToBounds = NO;
Конечно, это если вы хотите, чтобы ваша граница была размером в 1 единицу, если вы хотите большего, вы соответствующим образом адаптируете borderWidth
и рамку слоя. Это лучше, чем использование второго вида, немного большего размера, поскольку a CALayer
легче, чем a, UIView
и вам не нужно изменять рамку myView
, что хорошо, например, если myView
этоUIImageView
NB: Для меня результат был не идеальным на симуляторе (слой был не совсем в правильном положении, поэтому слой иногда был толще с одной стороны), но был именно тем, что требуется на реальном устройстве.
РЕДАКТИРОВАТЬ
На самом деле проблема, о которой я говорю в NB, заключалась только в том, что я уменьшил экран симулятора, при нормальном размере проблем нет.
Надеюсь, поможет