我正在尝试为应用程序加载配置文件图像,但我想为其添加一个白色边框并在显示之前使其变为圆形。为了做到这一点,我在 UIImageView 上设置了图像属性,然后通过设置适当的角半径来准备图像,将其屏蔽到边界,然后添加一个白色边框子层。最初,我通过互联网异步加载图像,一切正常,因为图像出现在视图出现之后。但是,当我缓存图像并尝试在 imageView 显示在屏幕上之前准备它时,我无法显示边框子层。它仍然被正确掩盖,只是没有边框。我用来准备图像的代码如下。
- (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有什么误解吗?将图层添加为子图层时是否重要?
我没有直接在图像层上使用边框属性的原因是它会在外面留下一小块令人不快的图像。