2016-09-30 77 views
0

我希望用戶從相冊中選擇一張照片,將其顯示在一張圖像上並將其存儲在NSUserDefaults中。 下面的代碼指headSculptureImage檢索來自NSUserDefaults的這個圖像並顯示它從NSUserDefaults中檢索後,快速查看照片變化圖

headSculptureImage.layer.cornerRadius = (headSculptureImage.frame.size.height)/2; 
    headSculptureImage.layer.masksToBounds = true 
    headSculptureImage.layer.borderWidth = 0; 

這3是用來製造本的ImageView爲圓形

if let userHeadSculpture = NSUserDefaults.standardUserDefaults().objectForKey("userHeadSculpture") { 
    let image = UIImage(data: userHeadSculpture as! NSData) 
    headSculptureImage.image = image 
    headSculptureImage.layer.cornerRadius = (headSculptureImage.frame.size.height)/2; 
    headSculptureImage.layer.masksToBounds = true 
    headSculptureImage.layer.borderWidth = 0; 
} 

問題是,當我從相冊中選擇一張照片,它的工作原理類似於enter image description here

當我重新打開應用時,我的預期與圖片a相同波夫,但它顯示爲enter image description here

如何解決它?

+0

你有沒有嘗試在這兩種情況下打印'headSculptureImage.frame.size'?這樣的菱形典型地通過將拐角半徑設置爲高於半寬而引起。請詳細說明問題。 – vzsg

回答

1

看起來您使用約束條件並使用viewDidLoad中的NSUserDefaults代碼。如果是這種情況,由於viewDidLoad在加載約束之前被調用,所以headSculptureImage.frame.size.height的值與您在約束條件下產生的結果不同,產生這種結果。
爲了解決該問題,請嘗試將代碼移動到viewDidLayoutSubviews(在約束全部設置後調用),以使cornerRadius的值完全符合您的需要。

請注意,viewDidLayoutSubviews會被頻繁調用,因此您可能需要添加某種標誌以確保僅在需要時調用該標誌。