खोज…


वाक्य - विन्यास

  1. // उद्देश्य सी

  2. [उविवि नया] // एक आबंटित वस्तु और आबंटित प्राप्त करें

  3. [[UIView आबंटित] initWithFrame: (पास CGRect)] // एक फ्रेम के साथ आवंटित और प्रारंभिक दृश्य प्राप्त करें

  4. [[उविवि आवंटित] init] // एक दृश्य वस्तु आवंटित और आरंभिक प्राप्त करें

  5. // स्विफ्ट

  6. UIView () // CGRect.zero फ्रेम के साथ एक UIView उदाहरण बनाता है

  7. UIView (फ्रेम: CGRect) // फ्रेम को निर्दिष्ट करने वाला एक UIView उदाहरण बनाता है

  8. UIView.addSubview (UIView) // सबव्यू के रूप में एक और UIView उदाहरण जोड़ें

  9. UIView.hidden // दृश्य की दृश्यता प्राप्त करें या सेट करें

  10. UIView.alpha // दृश्य की अस्पष्टता प्राप्त करें या सेट करें

  11. UIView.setNeedsLayout () // इसके लेआउट को अद्यतन करने के लिए दृश्य को मजबूर करता है

टिप्पणियों

UIView वर्ग स्क्रीन पर एक आयताकार क्षेत्र और उस क्षेत्र में सामग्री के प्रबंधन के लिए इंटरफेस को परिभाषित करता है। रनटाइम के दौरान, एक दृश्य वस्तु अपने क्षेत्र में किसी भी सामग्री के प्रतिपादन को संभालती है और उस सामग्री के साथ किसी भी बातचीत को भी संभालती है।

एक UIView बनाएँ

उद्देश्य सी

CGRect myFrame = CGRectMake(0, 0, 320, 35)
UIView *view = [[UIView alloc] initWithFrame:myFrame];

//Alternative way of defining the frame
UIView *view = [[UIView alloc] init];
CGRect myFrame = view.frame;
myFrame.size.width = 320;
myFrame.size.height = 35;
myFrame.origin.x = 0;
myFrame.origin.y = 0;
view.frame = myFrame;

तीव्र

let myFrame = CGRect(x: 0, y: 0, width: 320, height: 35)
let view = UIView(frame: myFrame)

दृश्य को गोल करें

एक गोल UIView बनाने के लिए, दृश्य की layer लिए एक cornerRadius निर्दिष्ट करें।

यह किसी भी वर्ग पर लागू होता है जो UIView से प्राप्त होता है, जैसे UIImageView

प्रोग्राम के रूप में

स्विफ्ट कोड

someImageView.layoutIfNeeded()
someImageView.clipsToBounds = true
someImageView.layer.cornerRadius = 10

उद्देश्य-सी कोड

[someImageView layoutIfNeeded];
someImageView.clipsToBounds = YES;
someImageView.layer.cornerRadius = 10;

उदाहरण

//Swift code
topImageView.layoutIfNeeded()
bottomImageView.layoutIfNeeded()
topImageView.clipsToBounds = true
topImageView.layer.cornerRadius = 10
bottomImageView.clipsToBounds = true
bottomImageView.layer.cornerRadius = bottomImageView.frame.width / 2

//Objective-C code
[topImageView layoutIfNeeded]
[bottomImageView layoutIfNeeded];
topImageView.clipsToBounds = YES;
topImageView.layer.cornerRadius = 10;
bottomImageView.clipsToBounds = YES;
bottomImageView.cornerRadius = CGRectGetWidth(bottomImageView.frame) / 2;

यहां परिणाम है, निर्दिष्ट कोने त्रिज्या का उपयोग करके गोल दृश्य प्रभाव दिखाना:

उदाहरण

ध्यान दें

ऐसा करने के लिए आपको क्वार्ट्जकोर ढांचे को शामिल करने की आवश्यकता है।

 #import <QuartzCore/QuartzCore.h>

स्टोरीबोर्ड विन्यास

एक गोल दृश्य प्रभाव को स्टोरीबोर्ड में संबंधित गुणों को सेट करके non-programmatically से भी प्राप्त किया जा सकता है।

यहाँ छवि विवरण दर्ज करें

चूंकि स्टोरीबोर्ड में layer गुण उजागर नहीं होते हैं, इसलिए आपको उपयोगकर्ता परिभाषित रनटाइम एट्रीब्यूट्स अनुभाग के माध्यम से cornerRadius विशेषता को संशोधित करना cornerRadius

यहाँ छवि विवरण दर्ज करें

स्विफ्ट एक्सटेंशन

जब तक यह समान चौड़ाई और ऊंचाई का है तब तक गोल दृश्य को लागू करने के लिए आप इस आसान एक्सटेंशन का उपयोग कर सकते हैं।

extension UIView {
    @discardableResult
    public func setAsCircle() -> Self {
        self.clipsToBounds = true
        let frameSize = self.frame.size
        self.layer.cornerRadius = min(frameSize.width, frameSize.height) / 2.0
        return self
    }
}

इसके प्रयेाग के लिए:

yourView.setAsCircle()

एक स्नैपशॉट ले रहा है

आप इस तरह से एक UIView से एक स्नैपशॉट ले सकते हैं:

तीव्र

let snapshot = view.snapshotView(afterScreenUpdates: true)

उद्देश्य सी

UIView *snapshot = [view snapshotViewAfterScreenUpdates: YES];

IBInspectable और IBDesignable का उपयोग करना

हाल ही में Xcode रिलीज में सबसे अच्छे नए फीचर्स में से एक (या दो) IBInspectable गुण और IBDesignable UIView s हैं। इनका आपके एप्लिकेशन की कार्यक्षमता से कोई लेना-देना नहीं है, बल्कि इसके बजाय Xcode में डेवलपर के अनुभव को प्रभावित करते हैं। लक्ष्य यह है कि आप बिना चलाए अपने iOS एप्लिकेशन में कस्टम दृश्य का निरीक्षण कर सकें। तो मान लें कि आपके पास कस्टम दृश्य है जिसे क्रिएटिव रूप से CustomView नाम दिया CustomView जो UIView से विरासत में मिला है। इस कस्टम दृश्य में, यह निर्दिष्ट रंग के साथ पाठ का एक स्ट्रिंग प्रदर्शित करेगा। आप किसी भी पाठ को प्रदर्शित नहीं करने का विकल्प भी चुन सकते हैं। हमें तीन गुणों की आवश्यकता होगी:

var textColor: UIColor = UIColor.blackColor()
var text: String?
var showText: Bool = true

फिर हम कक्षा में drawRect फ़ंक्शन को ओवरराइड कर सकते हैं:

if showText {
    if let text = text {
        let s = NSString(string: text)
        s.drawInRect(rect,
            withAttributes: [
                NSForegroundColorAttributeName: textColor,
                NSFontAttributeName: UIFont(name: "Helvetica Neue", size: 18)!
            ])
    }
}

यह मानते हुए कि text गुण सेट है, यह अनुप्रयोग के चलने पर ऊपरी बाएँ हाथ के कोने में एक स्ट्रिंग खींचेगा। समस्या यह है कि हमें पता नहीं चलेगा कि एप्लिकेशन को चलाने के बिना यह कैसा दिखता है। यह वह जगह है जहाँ IBInspectable और IBDesignable आते हैं। IBInspectable हमें Xcode में व्यू के प्रॉपर्टी वैल्यूज़ को विज़ुअली सेट करने की अनुमति देता है, जैसे बिल्ट इन कंट्रोल्स। IBDesignable हमें स्टोरीबोर्ड में एक दृश्य पूर्वावलोकन दिखाएगा। यहां बताया गया है कि कक्षा को कैसे देखना चाहिए:

@IBDesignable
class CustomView: UIView {
    @IBInspectable var textColor: UIColor = UIColor.blackColor()
    @IBInspectable var text: String?
    @IBInspectable var showText: Bool = true

    override func drawRect(rect: CGRect) {
        // ...
    }
}

या उद्देश्य सी में:

IB_DESIGNABLE
@interface CustomView: UIView

@property (nonatomic, strong) IBInspectable UIColor* textColor;
@property (nonatomic, strong) IBInspectable NSString* text;
@property (nonatomic, assign) IBInspectable BOOL showText;

@end

@implementation CustomView

- (instancetype)init {
    if(self = [super init]) {
        self.textColor = [UIColor blackColor];
        self.showText = YES;
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    //...
}

@end

अगले स्क्रीनशॉट में दिखाया गया है कि Xcode में क्या होता है। संशोधित वर्ग को जोड़ने के बाद पहला जो होता है। ध्यान दें कि तीन गुणों के लिए तीन नए UI तत्व हैं। पाठ का रंग एक रंग पिकर प्रदर्शित करेगा, पाठ सिर्फ एक इनपुट बॉक्स और पाठ दिखाएँ हमारे लिए विकल्प दे देंगे Off और On जो कर रहे हैं false और true क्रमशः।

अगले रंग बीनने का उपयोग करके लाल रंग में पाठ रंग बदलने के बाद है। साथ ही, drawRect फ़ंक्शन को इसे प्रदर्शित करने के लिए कुछ पाठ प्रदान किए गए हैं। ध्यान दें कि इंटरफ़ेस बिल्डर में दृश्य भी अपडेट किया गया है।

अंत में, संपत्ति निरीक्षक में शो टेक्स्ट Off सेट करना इंटरफ़ेस बिल्डर में टेक्स्ट डिस्प्ले को गायब कर देता है।

हालांकि, हम सब स्थिति आ जब हम गोल बनाने की जरूरत UIView अपने में अनेक दृश्य में Storyboard घोषित करने के .Instead IBDesignable के हर विचारों को Storyboard , इसके बेहतर बनाने के लिए एक Extension की UIView और प्राप्त एक यूजर इंटरफेस सिर्फ अपने हर के लिए बनाया गया UIView कॉर्नर त्रिज्या को सेट करके गोल दृश्य बनाने के लिए प्रोजेक्ट के माध्यम से। स्टोरीबोर्ड में आपके द्वारा बनाए गए किसी भी UIView पर कॉन्फ़िगर करने योग्य सीमा त्रिज्या।

extension UIView {
    
    @IBInspectable var cornerRadius:CGFloat {
        set {
            layer.cornerRadius = newValue
            clipsToBounds = newValue > 0
        }
        get {
            return layer.cornerRadius
        }
    }
    
}

यहाँ छवि विवरण दर्ज करें

एक UIView एनिमेटेड

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
view.backgroundColor = UIColor.orange
self.view.addSubview(view)
UIView.animate(withDuration: 0.75, delay: 0.5, options: .curveEaseIn, animations: {
    //This will cause view to go from (0,0) to
    // (self.view.frame.origin.x,self.view.frame.origin.y)
    view.frame.origin.x = self.view.frame.origin.x
    view.frame.origin.y = self.view.frame.origin.y
}) { (finished) in
    view.backgroundColor = UIColor.blueColor()
}

आकार और फ्रेम विशेषताओं के लिए UIView विस्तार

यदि हम दृश्य की उत्पत्ति का एक्स-कॉर्डिनेशन प्राप्त करना चाहते हैं, तो हमें इस तरह लिखना होगा:

view.frame.origin.x

चौड़ाई के लिए, हमें लिखना होगा:

view.frame.size.width

लेकिन अगर हम एक UIView लिए एक सरल एक्सटेंशन जोड़ते हैं, तो हम सभी विशेषताओं को बहुत सरलता से प्राप्त कर सकते हैं, जैसे:

view.x
view.y
view.width
view.height

यह इन विशेषताओं को सेट करने में भी मदद करेगा जैसे:

view.x = 10
view.y = 10
view.width = 100
view.height = 200

और सरल विस्तार होगा:

extension UIView {
    
    var x: CGFloat {
        get {
            return self.frame.origin.x
        }
        set {
            self.frame = CGRect(x: newValue, y: self.frame.origin.y, width: self.frame.size.width, height: self.frame.size.height)
        }
    }
    
    var y: CGFloat {
        get {
            return self.frame.origin.y
        }
        set {
            self.frame = CGRect(x: self.frame.origin.x, y: newValue, width: self.frame.size.width, height: self.frame.size.height)
        }
    }
    
    var width: CGFloat {
        get {
            return self.frame.size.width
        }
        set {
            self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: newValue, height: self.frame.size.height)
        }
    }
    
    var height: CGFloat {
        get {
            return self.frame.height
        }
        set {
            self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: self.frame.size.width, height: newValue)
        }
    }
}

हमें किसी प्रोजेक्ट में इस क्लास फाइल को जोड़ना होगा और यह पूरे प्रोजेक्ट में उपयोग करने के लिए उपलब्ध होगा!

क्रमिक रूप से एक और UIView से और में UIView प्रविष्टि और विलोपन का प्रबंधन

मान लें कि आपके पास एक parentView है, जिसमें आप एक नया subView प्रोग्रामेटिक रूप से subView चाहते हैं (जैसे। जब आप एक UIImageView को UIViewController के दृश्य में सम्मिलित करना चाहते हैं), तो आप नीचे दिए अनुसार इसे कर सकते हैं।

उद्देश्य सी

[parentView addSubview:subView];

तीव्र

parentView.addSubview(subView)

तुम भी एक और नीचे subview जोड़ सकते हैं subView2 , जो पहले से ही parentView की एक उप देखने के लिए निम्न कोड का उपयोग कर रहा है:

उद्देश्य सी

[parentView insertSubview:subView belowSubview:subView2];

तीव्र

parentView.insertSubview(subView, belowSubview: subView2)

यदि आप इसे subView2 ऊपर सम्मिलित करना चाहते हैं तो आप इसे इस प्रकार कर सकते हैं:

उद्देश्य सी

[parentView insertSubview:subView aboveSubview:subView2];

तीव्र

parentView.insertSubview(subView, aboveSubview: subView2)

यदि आपके कोड में कहीं आपको एक निश्चित सब subView को सामने लाने की आवश्यकता है, तो अन्य सभी parentView ऊपर, आप इसे इस तरह से कर सकते हैं:

उद्देश्य सी

[parentView bringSubviewToFront:subView];

तीव्र

parentView.bringSubviewToFront(subView)

अंत में, यदि आप subView से parentView subView हटाना चाहते हैं, तो आप नीचे के रूप में कर सकते हैं:

उद्देश्य सी

[subView removeFromSuperview];

तीव्र

subView.removeFromSuperview()

ऑटोलयूट का उपयोग करके UIView बनाएं

UIView *view = [[UIView alloc] init];

[self.view addSubview:view];

//Use the function if you want to use height as constraint
[self addView:view onParentView:self.view withHeight:200.f];


//Use this function if you want to add view with respect to parent and should resize with it
[self addFullResizeConstraintForSubview:view addedOnParentView:self.view];

कार्य

ऑटोलेयट बाधाओं का उपयोग करके निश्चित ऊंचाई के साथ दृश्य जोड़ने का कार्य

-(void)addView:(UIView*)subView onParentView:(UIView*)parentView withHeight:(CGFloat)height{

subView.translatesAutoresizingMaskIntoConstraints = NO;
    
NSLayoutConstraint *trailing =[NSLayoutConstraint
                                   constraintWithItem:subView
                                   attribute:NSLayoutAttributeTrailing
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:parent
                                   attribute:NSLayoutAttributeTrailing
                                   multiplier:1.0
                                   constant:10.f];


NSLayoutConstraint *top = [NSLayoutConstraint
                               constraintWithItem:subView
                               attribute:NSLayoutAttributeTop
                               relatedBy:NSLayoutRelationEqual
                               toItem:parent
                               attribute:NSLayoutAttributeTop
                               multiplier:1.0
                               constant:10.f];
    
NSLayoutConstraint *leading = [NSLayoutConstraint
                                   constraintWithItem:subView
                                   attribute:NSLayoutAttributeLeading
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:parent
                                   attribute:NSLayoutAttributeLeading
                                   multiplier:1.0
                                   constant:10.f];
[parent addConstraint:trailing];
[parent addConstraint:top];
[parent addConstraint:leading];

NSLayoutConstraint *heightConstraint =[NSLayoutConstraint
                                           constraintWithItem:subView
                                           attribute:NSLayoutAttributeHeight
                                           relatedBy:NSLayoutRelationEqual
                                           toItem:nil
                                           attribute:0
                                           multiplier:0.0
                                           constant:height];
    
[subView addConstraint:heightConstraint];

}

बनाया गया यूआईवाईयूवाई के लिए फंक्शन का पूर्ण आकार का अवरोध जोड़ें।

-(void)addFullResizeConstraintForSubview:(UIView*)subView addedOnParentView:(UIView*)parentView{

subView.translatesAutoresizingMaskIntoConstraints = NO;
    
NSLayoutConstraint *trailing =[NSLayoutConstraint
                                   constraintWithItem:subView
                                   attribute:NSLayoutAttributeTrailing
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:parent
                                   attribute:NSLayoutAttributeTrailing
                                   multiplier:1.0
                                   constant:10.f];


NSLayoutConstraint *top = [NSLayoutConstraint
                               constraintWithItem:subView
                               attribute:NSLayoutAttributeTop
                               relatedBy:NSLayoutRelationEqual
                               toItem:parent
                               attribute:NSLayoutAttributeTop
                               multiplier:1.0
                               constant:10.f];
    
NSLayoutConstraint *leading = [NSLayoutConstraint
                                   constraintWithItem:subView
                                   attribute:NSLayoutAttributeLeading
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:parent
                                   attribute:NSLayoutAttributeLeading
                                   multiplier:1.0
                                   constant:10.f];

NSLayoutConstraint *bottom =[NSLayoutConstraint
                                 constraintWithItem:subView
                                 attribute:NSLayoutAttributeBottom
                                 relatedBy:NSLayoutRelationEqual
                                 toItem:parent
                                 attribute:NSLayoutAttributeBottom
                                 multiplier:1.0
                                 constant:0.f];
[parent addConstraint:trailing];
[parent addConstraint:top];
[parent addConstraint:leading];
[parent addConstraint:bottom];
}

आंतरिक सामग्री के आकार का उपयोग

UIView उपवर्ग का निर्माण करते समय, आंतरिक सामग्री का आकार हार्डकोड ऊंचाई और चौड़ाई की बाधाओं को सेट करने से बचने में मदद करता है

एक वर्ग कैसे इस का उपयोग कर सकता है में एक बुनियादी झलक

class ImageView: UIView {
    var image: UIImage {
        didSet {
            invalidateIntrinsicContentSize()
        }
    }
    // omitting initializers
    // convenience init(image: UIImage)

    override func intrinsicContentSize() -> CGSize {
        return CGSize(width: image.size.width, height: image.size.height)
    }
}

यदि आप केवल एक आकार आंतरिक रूप से प्रदान करना चाहते हैं, तो आप उस मान के लिए UIViewNoIntrinsicMetric मान प्रदान कर सकते हैं जिसे आप अनदेखा करना चाहते हैं।

 override func intrinsicContentSize() -> CGSize {
     return CGSize(width: UIViewNoIntrinsicMetric, height: image.size.width)   
 }

AutoLayout और इंटरफ़ेस बिल्डर के साथ उपयोग करने पर लाभ

कोई इस ImageView (या UIImageView) को ले सकता है और पर्यवेक्षित केंद्र X के लिए क्षैतिज संरेखण और अनुरक्षण केंद्र Y के लिए ऊर्ध्वाधर संरेखण सेट कर सकता है।

UIImageView केंद्रित है

इंटरफ़ेस बिल्डर आपको निम्नलिखित चेतावनी देते हुए इस बिंदु पर शिकायत करेगा:

इंटरफ़ेस ऊंचाई और चौड़ाई चेतावनी

यह वह जगह है जहाँ Placeholder Intrinsic Size आता है।

आकार निरीक्षक पैनल में जा रहे हैं, और आंतरिक आकार ड्रॉपडाउन के लिए, आप इस मान को डिफ़ॉल्ट से प्लेसहोल्डर पर स्विच कर सकते हैं।

प्लेसहोल्डर आंतरिक आकार का स्थान

और अब इंटरफ़ेस बिल्डर पिछले चेतावनियों को हटा देगा और आप इस आकार का उपयोग इंटरफ़ेस बिल्डर में देखे गए विचारों को आकार देने के लिए कर सकते हैं।

एक दृश्य हिला

extension UIView {
    func shake() {
        let animation = CAKeyframeAnimation(keyPath: "transform.translation.x")
        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        animation.duration = 0.6
        animation.values = [-10.0, 10.0, -7.0, 7.0, -5.0, 5.0, 0.0 ]
        layer.add(animation, forKey: "shake")
    }
}

इस फ़ंक्शन का उपयोग इसे थोड़ा हिलाकर किसी विशिष्ट दृश्य पर ध्यान आकर्षित करने के लिए किया जा सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow