2013-08-20 30 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的?當我將圖層作爲子圖層添加時,它應該是否重要?

我沒有直接在圖像圖層上使用border屬性的原因是它會在外面留下一些很不愉快的圖像。

回答

1

我找到了答案!問題是我想使用profileImageView框架來設置邊框圖層的框架,但是因爲我使用的是自動佈局,所以在屏幕上顯示視圖之後纔會設置該屬性。

我落得這樣做:

/*! 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]; 
} 

我之所以添加邊框層的一切都是因爲該層的邊界上離開圖像視圖和邊框的邊緣之間的小神器。

相關問題