2016-09-30 9 views
12

में UICollectionViewCell में UIimage पर गोलाकार कोनों को सेट करें मुझे एक साधारण समस्या है कि मुझे Google, दस्तावेज़ या यहां पर कोई समाधान नहीं मिल रहा है।स्विफ्ट

मेरे पास मेरे व्यू कंट्रोलर में संग्रहदृश्य है। मैंने कस्टम सेल बनाया है, विवरणसेल, जिसमें यूआईएममेज है। मैं चाहता हूं कि इस छवि को गोलाकार कोने हों। हालांकि, मुझे नहीं पता कि UIImage परत पर cornerradius कहां सेट करें। मैंने कोशिकाओं की जागरूकता में कोशिश की है, प्रतिनिधि विधि सेलफोररोएटइंडेक्सपैथ और सेल में लेआउटस्यूब्यू ओवरराइड करें लेकिन यह काम नहीं करता है। UIImage के लिए त्रिज्या सेट करने के लिए मुझे कोड कहां रखा जाना चाहिए?

निर्दिष्ट करने के लिए, मुझे पता है कि UIImage के गोलाकार कोनों को कैसे बनाया जाए। लेकिन अगर यह कलेक्शनव्यू सेल का सबव्यूव है, तो मुझे नहीं पता कि कॉर्नरेडियस कहां सेट करना है।

यहाँ पहले से मेरी descriptionCell

class DescriptionCell: UICollectionViewCell { 
    @IBOutlet weak var mImage: UIImageView! 

    override func awakeFromNib() { 
    //mImage.layer.cornerradius = 5 
    //Does not work, the image is still square in the cell 
    } 

के लिए और cellforRowAtIndePath में

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("descriptioncell", forIndexPath: indexPath) as! DescriptionCell 
    //cell.mImage.layer.cornerradius = 5 
    //Does not work, the image is still square in the cell 
return cell  
} 

धन्यवाद कोड है!

+2

की संभावित डुप्लिकेट [यूआईएममेज के लिए गोल कोनों बनाना] (http://stackoverflow.com/questions/8938800/making-round-corners-for-a-uiimage) – Hama

+0

नहीं, यह अलग है। मैं पहले से ही उस जवाब से कोड का उपयोग कर रहा हूं। मेरा सवाल यह है कि UIImage.layer.cornerradius = xxx कहां रखना है? – Jell92

+0

प्रासंगिक कोड के साथ अपने प्रश्न को अद्यतन करें। – rmaddy

उत्तर

15

ठीक है आप उस उत्तर से कोड का हिस्सा उपयोग कर रहे हैं जिसका आपने कहा था कि आप उपयोग कर रहे थे। अन्य भाग इस तरह है imageView.clipsToBounds = true

अद्यतन अपने awakeFromNib:

override func awakeFromNib() { 
    mImage.layer.cornerRadius = 5 
    mimage.clipsToBounds = true 
} 

यह एक चक्र आप वर्ग ऊंचाई के आधे भाग को cornerRadius निर्धारित करने की आवश्यकता बनाने के लिए। अपने cellForItemAtIndexPath में इन पंक्तियों जोड़ें:

cell.layoutIfNeeded() 
cell.mImage.layer.cornerRadius = cell.mImage.frame.height/2 

अद्यतन

दो बार बुलाया जा रहा से बचने के layoutSubviews, अपने DescriptionCell कक्षा में layoutSubviews ओवरराइड और वहाँ कोड डाल करने के लिए:

override func layoutSubviews() { 
    super.layoutSubviews() 
    layoutIfNeeded() 
    mImage.layer.cornerRadius = mImage.frame.height/2 
} 
+0

मुझे लगता है कि चाल है! अब हालांकि एक और समस्या आती है, मैं चाहता हूं कि यह सर्कल के आकार का हो। मुझे पता है कि कोड कुछ ऐसा है: mImage.layer.cornerRadius = mImage.frame.width/2 लेकिन जब मैं इसका उपयोग करता हूं तो यह काम नहीं करता है। छवि गायब हो जाती है! – Jell92

+2

फ्रेम पर आधारित कोने त्रिज्या को सेट करने के लिए कॉल को जागृत करने के बाद बहुत कुछ किया जाना चाहिए। कोशिका के आकार के बाद इसे करने की आवश्यकता है और छवि सेट की गई है। – rmaddy

+0

उस उत्तर के लिए धन्यवाद! और वह बिल्कुल कब है? मैं इसे किस विधि में सेट कर सकता हूं? – Jell92

1

क्या आपने इसे कस्टम UICollectionViewCell के init फ़ंक्शन के अंदर रखने का प्रयास किया है?

override init(frame: CGRect) { 
    super.init(frame: frame) 

    image.layer.masksToBounds = true 
    image.layer.cornerRadius = 10 
}