2009-12-10 16 views
52

कैसे बनाना है I एक UIView या UIImageView बनाना चाहते हैं जो एक सर्कल है। या एक सर्कल जो मैं एक स्लाइडर का उपयोग करने के आकार को बदल सकता हूं, और एक pickerview के साथ रंग बदल सकता हूं।एक परिपत्र UIView

+0

यह क्यूए *** अविश्वसनीय रूप से पुराने *** है। ध्यान रखें कि इन दिनों आप बहुत आसानी से "@IBDesignable" का उपयोग करते हैं और यह मामूली है। का आनंद लें! – Fattie

+0

@ जोबलो जब तक कि मैं इसे याद नहीं कर रहा हूं, मुझे "@IBDesignable" ** उत्तर ** यहां नहीं दिखाई देता है। क्या आप अपना जोड़ सकते हैं? – pkamb

उत्तर

103

मैं कम से कम मनमानी आकार की मंडलियों को चित्रित करने के लिए आपको शॉर्टकट दिखा सकता हूं। कोई ओपनजीएल नहीं, कोई कोर ग्राफिक्स ड्राइंग की आवश्यकता नहीं है।

तक पहुंच प्राप्त करने के लिए क्वार्ट्जकोर फ्रेमवर्क आयात करें। कॉर्नर रेडियस आपके UIView या UIImageView की संपत्ति।

#import <QuartzCore/QuartzCore.h> 

मैन्युअल रूप से इसे अपने प्रोजेक्ट के फ्रेमवर्क फ़ोल्डर में भी जोड़ें।

आपके विचार नियंत्रक के लिए इस विधि जोड़ें या आपको उपलब्ध हो जाए:

-(void)setRoundedView:(UIImageView *)roundedView toDiameter:(float)newSize; 
{ 
    CGPoint saveCenter = roundedView.center; 
    CGRect newFrame = CGRectMake(roundedView.frame.origin.x, roundedView.frame.origin.y, newSize, newSize); 
    roundedView.frame = newFrame; 
    roundedView.layer.cornerRadius = newSize/2.0; 
    roundedView.center = saveCenter; 
} 

इसका इस्तेमाल के लिए, बस इसे पारित एक UIImageView और एक व्यास। यह उदाहरण मानता है कि आपके पास देखें पर एक सबव्यूव के रूप में जोड़ा गया "सर्क" नामक UIImageView है। इसमें पृष्ठभूमि होना चाहिए सेट ताकि आप इसे देख सकें।

circ.clipsToBounds = YES; 
[self setRoundedView:circ toDiameter:100.0]; 

यह सिर्फ UIImageViews संभालती है लेकिन आप किसी भी UIView को यह सामान्यीकरण कर सकते हैं।

नोट: आईओएस 7 के बाद से, क्लिपटॉबाउंड को यस की आवश्यकता है।

+0

हे @ willc2 यह मेरे लिए काम नहीं कर रहा है। मैंने कस्टम टेबल व्यूसेल बनाया है और सेल में 4 छवि दृश्य जोड़े हैं। और cellForRowAtIndexPath में अपनी विधि का उपयोग करें, लेकिन यह केवल छवि के आकार को बदलता है दृश्य मैं गोलाकार कॉर्नर नहीं देख सकता, मैं क्या गलत कर रहा हूं? – Bonnie

+0

@BOnnie आपको एक नए प्रश्न के रूप में पोस्ट करना चाहिए। इससे आपको अपने सेटअप का वर्णन करने की जगह मिल जाएगी और कई लोग इसे देख पाएंगे। – willc2

+11

@ बोनी: मुझे पता है कि यह पुराना है, लेकिन किसी और के लिए जो इस पर आता है, आपको roundedView.clipsToBounds = YES सेट करने की आवश्यकता होगी; – akdsouza

3

आपको एक पारदर्शी UIView (0 का पृष्ठभूमि रंग अल्फा) बनाने की आवश्यकता है, और फिर, इसके drawRect में: कोरग्राफिक्स कॉल का उपयोग करके अपना मंडल खींचें। आप दृश्य की परत भी संपादित कर सकते हैं, और इसे कोनेराइडस दे सकते हैं।

12

ग्राफिक्स कॉल की कोई आवश्यकता नहीं है। बस चौड़ाई के कोने त्रिज्या सेट/2. इस UI तत्व

30
// For those looking to round the corners of an image view 
imageView.layer.cornerRadius = imageView.bounds.size.width/2; 
imageView.layer.masksToBounds = YES; 
19

यानी किसी भी दृश्य वस्तु पर किया जा सकता है किसी को नीचे से स्विफ्ट बराबर की तलाश में है अगर जवाब (Xcode7.2) है:

(इस ऊंचाई काम करने के लिए और चौड़ाई बराबर होना चाहिए के लिए।)

extension UIView { 
    func makeCircular() { 
     self.layer.cornerRadius = min(self.frame.size.height, self.frame.size.width)/2.0 
     self.clipsToBounds = true 
    } 
} 

enter image description here

+0

इस कोड का उद्देश्य क्या है? मुझे लगता है कि यह अनावश्यक है !! 'cntr: CGPoint = self.center self.center = cntr' –

+0

@ जो ब्लो व्यक्तिगत रूप से मैं स्टोरीबोर्ड या निब रास्ता पसंद नहीं करता क्योंकि आपको दृश्य की ऊंचाई और चौड़ाई को हार्ड कोड करने की आवश्यकता होती है और उसे जानने की आवश्यकता होती है अग्रिम। यदि आप अलग-अलग डिवाइस आकार और अभिविन्यास के साथ दृश्य को अपनाने और स्केल कर रहे हैं तो इंटरफ़ेस बिल्डर दृष्टिकोण टूट सकता है। –

+1

हाय, यह क्यूए बहुत पुराना है। इन दिनों एकमात्र समाधान आईबीडी डिजाइन करने योग्य है। यह आज बिल्कुल तुच्छ है। – Fattie

2

जैसा कि कुछ टिप्पणियों में उल्लिखित है, @IBDesignable अब यह बहुत आसान बनाता है, ताकि आप अपने गोलाकार UIImageView को कॉन्फ़िगर करने के लिए इंटरफ़ेस बिल्डर का उपयोग कर सकें।

सबसे पहले एक वर्ग RoundedImageView.swift नामित बनाने और इसे करने के लिए इस कोड पेस्ट करें:

import UIKit 

@IBDesignable public class RoundedImageView: UIImageView { 

    override public func layoutSubviews() { 
     super.layoutSubviews() 

     //hard-coded this since it's always round 
     layer.cornerRadius = 0.5 * bounds.size.width 
    } 
} 

InterfaceBuilder में UIImageView का चयन करें और रीति के UIImageView से वर्ग बदलने RoundedImageView:

enter image description here

सेट Clip to Bounds सत्य (या तस्वीर सर्कल से आगे बढ़ेगी):

enter image description here

अब इंटरफ़ेसबिल्डर में यह स्वयं को गोल करना चाहिए, जो कि काफी निफ्टी है। चौड़ाई और ऊंचाई को समान मानों पर सेट करना सुनिश्चित करें या इसे ज़ेपेल्लिन की तरह आकार दिया जाएगा!

enter image description here

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^