앱의 프로필 이미지를로드하려고하지만 표시하기 전에 흰색 테두리를 추가하여 원형으로 만듭니다. 이를 위해 UIImageView에서 이미지 속성을 설정 한 다음 적절한 코너 반경을 설정하여 이미지를 준비하고 경계에 마스크를 적용한 다음 흰색 테두리 보조 레이어를 추가합니다. 원래 비동기 적으로 인터넷을 통해 이미지를로드하고 있었고 뷰가 나타난 후에 이미지가 나타나기 때문에 모든 것이 잘 작동했습니다. 그러나 imageView를 화면에 표시하기 전에 이미지를 캐싱하고 준비하려고 할 때 경계 하위 레이어를 표시 할 수 없습니다. 그것은 여전히 적절하게 감추어 져 있었고, 경계는 없었습니다. 이미지를 준비하기 위해 사용하는 코드는 다음과 같습니다.부울은 viewDidAppear 이후에 추가하지 않으면 표시되지 않습니다.
- (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에 대해 오해하고있는 것이 있습니까? 하위 레이어로 레이어를 추가 할 때 중요합니까?
경계층 속성을 이미지 레이어에 직접 사용하지 않는 이유는 외부에 불쾌감을주는 작은 조각의 이미지를 남기 때문입니다.