2013-08-20 2 views
0

앱의 프로필 이미지를로드하려고하지만 표시하기 전에 흰색 테두리를 추가하여 원형으로 만듭니다. 이를 위해 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에 대해 오해하고있는 것이 있습니까? 하위 레이어로 레이어를 추가 할 때 중요합니까?

경계층 속성을 이미지 레이어에 직접 사용하지 않는 이유는 외부에 불쾌감을주는 작은 조각의 이미지를 남기 때문입니다.

답변

1

답변을 찾았습니다! 문제는 profileImageView 프레임을 사용하여 테두리 레이어의 프레임을 설정하려고하지만 화면에보기가 표시 될 때까지 해당 속성이 설정되지 않은 autolayout을 사용하고 있기 때문입니다. 레이어의 경계가 이미지보기 및 테두리의 가장자리 사이의 작은 유물 잎 때문에

/*! This function adds a border layer to the profile image view. */ 
- (void)addBorderLayerToProfileImageView { 
    CALayer *borderLayer = [CALayer layer]; 
    CGRect borderFrame = CGRectMake(-1.0, -1.0, (PROFILE_IMAGE_DIAMETER+2.0), (PROFILE_IMAGE_DIAMETER+2.0)); 
    [borderLayer setBackgroundColor:[[UIColor clearColor] CGColor]]; 
    [borderLayer setFrame:borderFrame]; 
    [borderLayer setCornerRadius:PROFILE_IMAGE_DIAMETER/2.0]; 
    [borderLayer setBorderWidth:PROFILE_IMAGE_BORDER_WIDTH+1.0]; 
    [borderLayer setBorderColor:[UIColor whiteColor].CGColor]; 
    [self.profileImageView.layer addSublayer:borderLayer]; 
} 

이유는 내가 전혀되는 경계 레이어를 추가했다 :

나는 일을 끝났다.

관련 문제