Я пытаюсь загрузить изображение профиля для приложения, но хочу добавить к нему белую рамку и сделать его круговым, прежде чем я его покажу. Чтобы сделать это, я установил свойство изображения в UIImageView, а затем подготовлю изображение, установив соответствующий радиус угла, замаскировав его до границ, а затем добавив дополнительный подуровень границы. Первоначально я загружал изображение через Интернет асинхронно, и все работало нормально, потому что изображение появилось после появления представления. Тем не менее, когда я кэшировал изображение и пытался его подготовить до того, как изображение было отображено на экране, я не смог отобразить пограничный подуровень. Он по-прежнему замаскирован должным образом, просто нет границы. Код, который я использую для подготовки изображения, приведен ниже.Подкласс не отображается, если только после добавленияDIDAppear
- (void)prepareProfileImage
{
CALayer *imageLayer = self.profileImageView.layer;
imageLayer.borderColor = [UIColor whiteColor].CGColor;
imageLayer.allowsEdgeAntialiasing = NO;
[imageLayer setCornerRadius:PROFILE_IMAGE_DIAMETER/2.0];
[imageLayer setMasksToBounds:YES];
CALayer *borderLayer = [CALayer layer];
CGRect borderFrame = CGRectMake(-1.0, -1.0, (self.profileImageView.frame.size.width+2.0), (self.profileImageView.frame.size.height+2.0));
[borderLayer setBackgroundColor:[[UIColor whiteColor] CGColor]];
[borderLayer setFrame:borderFrame];
[borderLayer setCornerRadius:PROFILE_IMAGE_DIAMETER/2.0];
[borderLayer setBorderWidth:PROFILE_IMAGE_BORDER_WIDTH+1.0];
[borderLayer setBorderColor:[UIColor whiteColor].CGColor];
[imageLayer addSublayer:borderLayer];
}
Этот метод отлично работает до тех пор, как это называется после viewDidLoad, но не добавит пограничный слой, если вызывается перед viewDidLoad. Я подтвердил, что self.profileImageView был выделен во время вызова этого метода, но я получаю только круговой образ, без границы.
Есть ли что-то, что я не понимаю о CALayers? Должно ли это иметь значение, когда я добавляю слой в качестве подслоя?
Причина, по которой я не использую свойство border непосредственно на слое изображения, заключается в том, что он оставляет маленькую щель изображения вокруг снаружи, что неприятно.