UIVisualEffectView से Blur Image का उपयोग कैसे करें?


208

क्या कोई छवि को कलंक लगाने का एक छोटा सा उदाहरण दे सकता है? मैं थोड़ी देर के लिए कोड का पता लगाने की कोशिश कर रहा हूँ :( अभी भी नया है obj c पर!

UIVisualEffectViewजटिल दृश्य प्रभाव के ऊपर एक सरल अमूर्त प्रदान करता है। वांछित प्रभाव के आधार पर, परिणाम दृश्य के पीछे स्तरित सामग्री या दृश्य के contentView में जोड़ी गई सामग्री को प्रभावित कर सकते हैं।

एक लागू UIVisualEffectViewकिसी मौजूदा दृश्य करने के लिए बाहर निकलने को देखने के लिए एक कलंक या जीवंतता प्रभाव लागू करने। UIVisualEffectView को पदानुक्रम में जोड़ने के बाद, सामग्री के दृश्य में कोई भी सबव्यू जोड़ें UIVisualEffectView। सीधे UIVisualEffectViewस्वयं से साक्षात्कार न जोड़ें ।

https://developer.apple.com/documentation/uikit/uivisualeffectview#//apple_ref/occ/instp/UIVisualEffectView/contentView


1
ध्यान से देखने के लिए सावधान रहें UIVisualEffectView's contentView github.com/onmyway133/blog/issues/124
onmyway133

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

जवाबों:


415

बस इस धुंधला दृश्य को imageView पर रखें। यहाँ उद्देश्य-सी में एक उदाहरण दिया गया है:

UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

visualEffectView.frame = imageView.bounds;
[imageView addSubview:visualEffectView];

और स्विफ्ट:

var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))    

visualEffectView.frame = imageView.bounds

imageView.addSubview(visualEffectView)

3
आपको बहुत - बहुत धन्यवाद! मैं फ्रेम सेट करने के बारे में भूल गया :( दृश्य के लिए अभी तक Google पर कुछ भी नहीं है, इसलिए यह पहला खोज शब्द होना चाहिए :)
cNoob

1
बेहतर आशा है कि एपीआई नहीं बदलेगा! यही कारण है कि अभी तक जारी नहीं किए गए Apple APIs पर चर्चा करने वाले कारणों में से एक मुश्किल हो सकता है। उदाहरण के लिए, कुछ UIKit डायनेमिक्स API बीटा और रिलीज़ के बीच थोड़ा बदल जाते हैं। कुछ भी बड़ा नहीं है, लेकिन उन्होंने मूल एपीआई के खिलाफ लिखे गए किसी भी नमूना कोड को तोड़ दिया होगा।
ज़ेव ईसेनबर्ग

5
वहाँ वैसे भी / में धब्बा चेतन चेतन है?
रुबिन मार्टिनेज जूनियर

3
@BS आप दृश्य प्रभाव दृश्य के अल्फा को चेतन कर सकते हैं। बूम।
मैकिज ट्राइबेलो

2
UIBlurEffect बहुत बढ़िया है, लेकिन ध्यान दें कि यह iPad2 जैसे पुराने उपकरणों पर काम नहीं करता है - मैंने यह जानने में घंटों की कोशिश की कि यह केवल मेरी स्क्रीन पर एक पारभासी परत क्यों डाल रहा है और धुंधला नहीं है - यह सब इसलिए था क्योंकि मैं एक पुराने डिवाइस पर परीक्षण कर रहा था
कीथ

135

यहां बताया गया है कि UIVisualEffectView के साथ UIVibrancyEffect और UIBlurEffect का उपयोग कैसे करें

उद्देश्य सी:

// Blur effect
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
[blurEffectView setFrame:self.view.bounds];
[self.view addSubview:blurEffectView];

// Vibrancy effect
UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];
UIVisualEffectView *vibrancyEffectView = [[UIVisualEffectView alloc] initWithEffect:vibrancyEffect];
[vibrancyEffectView setFrame:self.view.bounds];

// Label for vibrant text
UILabel *vibrantLabel = [[UILabel alloc] init];
[vibrantLabel setText:@"Vibrant"];
[vibrantLabel setFont:[UIFont systemFontOfSize:72.0f]];
[vibrantLabel sizeToFit];
[vibrantLabel setCenter: self.view.center];

// Add label to the vibrancy view
[[vibrancyEffectView contentView] addSubview:vibrantLabel];

// Add the vibrancy view to the blur view
[[blurEffectView contentView] addSubview:vibrancyEffectView];

स्विफ्ट 4:

    // Blur Effect
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = view.bounds
    view.addSubview(blurEffectView)

    // Vibrancy Effect
    let vibrancyEffect = UIVibrancyEffect(blurEffect: blurEffect)
    let vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect)
    vibrancyEffectView.frame = view.bounds

    // Label for vibrant text
    let vibrantLabel = UILabel()
    vibrantLabel.text = "Vibrant"
    vibrantLabel.font = UIFont.systemFont(ofSize: 72.0)
    vibrantLabel.sizeToFit()
    vibrantLabel.center = view.center

    // Add label to the vibrancy view
    vibrancyEffectView.contentView.addSubview(vibrantLabel)

    // Add the vibrancy view to the blur view
    blurEffectView.contentView.addSubview(vibrancyEffectView)

1
उप-वर्गीकरण के बिना भी वर्कअराउंड काम करता है, बस परिभाषित करेंextension UILabel { override func tintColorDidChange() { textColor = tintColor; super.tintColorDidChange() } }
पालीमोंडो

1
लगता है Apple ने बग को ठीक कर दिया है। IOS 8 बीटा 2 में उपवर्ग / विस्तार वर्कअराउंड अब आवश्यक नहीं है
बेंजामिन मेयो

2
धन्यवाद। मैंने बग फिक्स का परीक्षण और पुष्टि की है और उत्तर को संपादित किया है।
मैट रंडल

1
Im इसे मेरे दृश्य में जोड़ने की कोशिश कर रहा हूं, लेकिन हर बार जब मैं दृश्य प्रस्तुत करता हूं, तो यह तब तक धुंधला हो जाता है जब तक कि मुझे एक सफेद पृष्ठभूमि नहीं मिलती ... मैं इसे हटाने के बाद दृश्य को हटा रहा हूं। इसे हटाने के बाद, लेकिन मुझे वही परिणाम मिलता है। .. कोई विचार?
जॉर्ज आसडा

@GeorgeAsda कैसे कॉल करने के बजाय removeFromSuperView, आप कर सकते हैं [self.visualEffectView setHidden:NO];? छिपाने और प्रदर्शन करने की तुलना में दृश्य पर आवंटन और जोड़ना महंगा ऑपरेशन है।
यूं ली

46

आप इन बिल्डर को सरल परिस्थितियों के लिए आसानी से इन प्रभावों को बनाने के लिए उपयोग कर सकते हैं। चूंकि विचारों के z- मान दस्तावेज़ आउटलाइन में सूचीबद्ध किए गए आदेश पर निर्भर करेंगे, आप UIVisualEffectViewजिस दस्तावेज़ को धुंधला करना चाहते हैं, उससे पहले दस्तावेज़ आउटलाइन पर खींच सकते हैं । यह स्वचालित रूप से एक नेस्टेड बनाता है UIView, जो contentViewदी गई संपत्ति है UIVisualEffectView। इस दृश्य के भीतर नेस्ट चीजें जो आप धब्बा के शीर्ष पर प्रकट करना चाहते हैं।

एक्सकोड 6 बीटा 5

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

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


क्या आप इस बात की पुष्टि कर सकते हैं कि वास्तव में क्या दिखाता है? मेरी छवि (जिसे आपने अपने पदानुक्रम में "बैकग्राउंडफ़ोटो" कहा है) को एक धुंधला शैली के तहत धुंधला कर दिया गया है: डार्क पारभासी दृश्य। (Xcode 6.01 का रिलीज़ संस्करण और iOS सिम्युलेटर का उपयोग करते हुए)
tobinjim

आपका क्या मतलब है 'सिर्फ मंद है'? आपको नहीं लगता कि यह धुंधला है?
ओह्ह

ठीक है, मैं कुछ घंटों में देखूंगा।
ओह्ह

धन्यवाद! आपके पास अपने पृष्ठभूमिफ़ोटो पर एक पदानुक्रम है जो स्क्रीनशॉट में ढह गया है ... मैंने अभी एक UIImageView का उपयोग किया है और इसे एक तस्वीर सौंपी है (हरे रंग की पृष्ठभूमि के खिलाफ एक हल्के रंग का कुत्ता - सफेद पैरों और हरी घास के बीच की तेज परिभाषा है) बस के रूप में तेज जब दृश्य प्रभाव दृश्य द्वारा कवर के रूप में जब नहीं)।
tobinjim

1
मैंने देखा है कि ब्लर के प्रकार को डार्क में बदलते हुए, लेबल को सफेद रंग मिलता है ...
डैनियल

8

मैं स्टोरीबोर्ड के माध्यम से विज़ुअल इफेक्ट्स बनाना पसंद करता हूं - यूआई एलिमेंट्स को बनाने या बनाए रखने के लिए उपयोग किए गए कोई कोड नहीं। यह मुझे पूर्ण परिदृश्य समर्थन भी देता है। मैंने ब्लर के साथ UIVisualEffects का उपयोग करने का थोड़ा डेमो किया है और जीवंतता भी।

जीथब पर डेमो


8

अगर किसी को स्विफ्ट में जवाब पसंद आएगा:

var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark) // Change .Dark into .Light if you'd like.

var blurView = UIVisualEffectView(effect: blurEffect)

blurView.frame = theImage.bounds // 'theImage' is an image. I think you can apply this to the view too!

अपडेट करें :

अब तक, यह आईबी के तहत उपलब्ध है इसलिए आपको इसके लिए कुछ भी कोड नहीं करना है :)


2
-(void) addBlurEffectOverImageView:(UIImageView *) _imageView
{
    UIVisualEffect *blurEffect;
    blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];

    UIVisualEffectView *visualEffectView;
    visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

    visualEffectView.frame = _imageView.bounds;
    [_imageView addSubview:visualEffectView];
}

पोस्ट के मुद्दे को ठीक करने में ओपी आपकी मदद कैसे करे, इसके जवाब के साथ कुछ पाठ जोड़ें
ρяєρ withя K

0

इसका उपयोग पृष्ठभूमि को धुंधला करने के लिए किया जाता है, या तो प्रकाश या अंधेरा, ताकि पाठ को अधिक आसानी से मढ़ा जा सके। आप वैकल्पिक रूप से जीवंतता को सक्षम कर सकते हैं, जो पाठ को धब्बा के साथ एक उज्ज्वल, विपरीत रंग में प्रस्तुत करने का कारण बनता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.