2012-07-22 16 views
33

मैं UIImageView में फ्रॉस्टेड ग्लास प्रभाव लागू करने का प्रयास कर रहा हूं।आईफोन एसडीके - फ्रॉस्टेड ग्लास (आईओएस 7 ब्लर) प्रभाव

मैंने in this question जो पाया है उसे लागू करने का प्रयास किया, लेकिन परिणाम स्वीकार्य नहीं था। मैं कुछ इस तरह थे:

Frosted Glass Effect

कोई भी विचार?

अद्यतन:

इसके अलावा, हम देख सकते हैं कि iOS 7 स्थानों का एक बहुत में प्रभाव इस तरह का उपयोग करता है। हम इसे पुन: पेश कैसे कर सकते हैं?

+0

यहाँ UIToolbar साथ समाधान है/1 9 606076/774394 –

+0

मैंने संपादन 2 में कुछ ऐसा ही बताया - यह यूआईटीूलबार का उपयोग भी करता है –

+0

हाँ आप सही हैं। लेकिन यह समाधान UIView एनीमेशन के साथ फ्रेम/सीमाओं को एनिमेट करने पर काम करता है। –

उत्तर

51

CoreImage के बारे में एक अच्छा ट्यूटोरियल, यहाँ है कैसे फिल्टर और अधिक लागू करने के लिए दिखा:

http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5

UPDATE 1

तो अनुसंधान का एक छोटा सा के बाद, मैं उस की खोज समाप्त हो गया लाइब्रेरी के ओएस एक्स संस्करण की तुलना करते समय, आईओएस के लिए कोर छवि अभी भी अपूर्ण है। तो मैंने बहुत गुस्सा किया, और मुझे दो समाधान मिलते हैं, उनमें से एक और अधिक सरल, और अन्य व्यापक और जटिल पुस्तकालय।

तो, उदाहरण के लिए, एक कुछ पंक्तियों में मैं परिणाम मैं चाहता हूँ प्राप्त कर सकते हैं (जहां originalImage UIImage है प्रभाव लागू करने):

GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc] init]; 
blurFilter.blurSize = 2; 
UIImage *blurImage = [blurFilter imageByFilteringImage:resizedImage]; 

अद्यतन 2

ऐप्पल ने आईओएस 7 की घोषणा के बाद, कुछ डेवलपर्स को ऐसा करने के लिए एक कामकाज मिला जो ऐप्पल ने डिफ़ॉल्ट आईओएस ऐप्स में किया था, क्योंकि ऐप्पल ने इसके लिए एक एपीआई प्रदान नहीं किया था। The simplest and better solution, in my opinion, is this one। मुझे क्यों लगता है कि यह सबसे अच्छा है? क्योंकि अगर इसके पीछे कुछ दृश्य चलता है, तो धुंध अभी भी अद्यतन प्रभाव के साथ बहुत अच्छा काम करता है, क्योंकि हम उम्मीद करते हैं कि इसे काम करना चाहिए। हालांकि, ध्यान रखें कि यह काम करने के लिए आईओएस 7 एसडीके पर निर्भर करता है, और यदि ऐप्पल UIToolbar बदलता है तो यह जोखिम भरा हो सकता है।

अद्यतन 3

एप्पल WWDC 2013 में उल्लेख किया है, (सत्र 226 - iOS पर आकर्षक यूआई को लागू) वे UIImage पर एक वर्ग वर्ग प्रदान करेगा,, UIImage + ImageEffects (मैं इसे googled, and found here बुलाया लेकिन यह Developer Portal - search for UIImageEffects in the search box में उपलब्ध है)। इस श्रेणी के साथ, आप कई विधियों (प्रकाश, अंधेरे, एक विशिष्ट रंग के साथ, आदि) का उपयोग करके एक स्थिर UIImage में धुंध लागू कर सकते हैं। इसके अलावा, कल I saw this component और इसे बहुत दिलचस्प पाया, क्योंकि आप एक फ्रेम में प्रभाव (उपर्युक्त श्रेणी के आधार पर) लागू कर सकते हैं।

अद्यतन 4

अंत में, iOS 8 पर, एप्पल नए वर्गों है कि लाइव कलंक आसानी से कर सकते का विमोचन किया। UIVisualEffect और UIVisualEffectView के साथ, आप अपने ऐप्स में त्वरित रूप से लाइव ब्लर जोड़ सकते हैं। Here is a good tutorial from Ryan Nystrom on how to use those classes (and in blur in general): iOS 7 और 8, के लिए

+4

आपको ऊपर के लिए जा रहे दिखने के लिए गॉसियन ब्लर को एक सफेद रंग के साथ मिश्रण करना पड़ सकता है, और मैं किसी बिंदु पर इसके लिए एक समर्पित फ़िल्टर करने जा रहा था। इसके अलावा, मैं बनावट फ्रॉस्टेड ग्लास के साथ प्रयोग करने जा रहा था, जैसे कि इस शेडर प्रदान करता है: http://coding-experiments.blogspot.com/2010/06/frosted-glass.html –

+0

और मैं इसे कैसे कर सकता हूं? मुझे लगता है कि मेरे पास दस्तावेज़ों को पढ़ने के लिए कहां नहीं है = (दस्तावेज़ों को संकलित नहीं कर सका। –

+0

कस्टम फ़िल्टर के लिए, सबसे अच्छा संदर्भ यह देखने के लिए है कि अन्य फ़िल्टर कैसे काम करते हैं। उदाहरण के लिए, उपरोक्त लिंक किए गए ग्लास एक कस्टम टुकड़ा शेडर का उपयोग करके पूरा किया जाना चाहिए, इसलिए आपको एक नया कस्टम फ़िल्टर (टेम्पलेट के समान कुछ उपयोग करके) बनाना होगा और ओपनजीएल ईएस में काम करने के लिए प्रदान किए गए टुकड़े टुकड़े को संशोधित करना होगा।चमकीले धुंध के लिए, आप गॉसियन ब्लर के साथ एक चमक फ़िल्टर को चेन करने में सक्षम हो सकते हैं, या सबसे खराब तरीके से एक हल्के चरण के लिए एक कस्टम समूह शेडर के साथ फ़िल्टर समूह बना सकते हैं। मूल दस्तावेज Readme.md फ़ाइल में है। –

1

the Core Image Programming Guide पर एक नज़र डालें। ऐसा लगता है कि stylize filter और blur filter आपकी आवश्यकताओं के अनुरूप हो सकता है। मैंने पहले कभी कोर छवि के साथ काम नहीं किया है, लेकिन मुझे लगता है कि कुछ अच्छे डब्ल्यूडब्ल्यूडीसी सत्र हो सकते हैं जिनमें उन्हें शामिल किया गया हो। प्रलेखन में a basic piece of sample code here है।

+0

ऐसा लगता है कि आईओएस में ओएस एक्स के सभी फ़िल्टर नहीं हैं। आप इसे कोड 'एनएसएआरएआरए * गुण = [सीआईएफलेटर फ़िल्टर नामइंस श्रेणी: केसीआईसीआई श्रेणीबिल्टिन] द्वारा देख सकते हैं; एनएसएलओजी (@ "% @", गुण); –

+0

विवरण प्राप्त किए बिना, क्या आपने आईओएस 6 पर वह कोड चलाया है? – Moshe

+0

अभी तक नहीं। मेरा अपना जवाब जांचें - हल हो गया! –

21

समाधान बिल्कुल CoreImage या CoreGraphics का उपयोग किए बिना:

- (void)addBlurToView:(UIView *)view { 
    UIView *blurView = nil; 

    if([UIBlurEffect class]) { // iOS 8 
     UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]; 
     blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; 
     blurView.frame = view.frame; 

    } else { // workaround for iOS 7 
     blurView = [[UIToolbar alloc] initWithFrame:view.bounds]; 
    } 

    [blurView setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    [view addSubview:blurView]; 
    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]]; 
    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]]; 
} 

(यह मानते हुए कि आप iOS 7 से पुराने संस्करणों को लक्षित नहीं करते, यदि आप हैं, तो आप करना होगा else ब्लॉक में आईओएस संस्करण के लिए परीक्षण)

यह समाधान किसी भी दृश्य पर लागू नहीं होता है, न केवल छवियों।

+0

बहुत उपयोगी उत्तर, आईओएस 7 और 8 के लिए इसे कार्यान्वित करना आसान बनाता है, यह मानते हुए कि मैं लगातार इस धुंधले दृश्य को जोड़ रहा हूं और हटा रहा हूं, क्या मुझे हर बार "पर्यवेक्षण से दृश्य को हटाने" में बाधाओं को दूर करना है। (मैं इसे फिर से जोड़ने के लिए इस कोड का उपयोग करता हूं, इसलिए मुझे पता है कि बाधाओं को लगातार जोड़ा जाता है) – Pochi

+0

इसे हटाने के बजाय इसे क्यों न छुपाएं? – KPM

+2

उत्कृष्ट उदाहरण। बहुत अच्छा काम करता है। –

2

का उपयोग UIImageEffects

आप अधिक नियंत्रण चाहते हैं जब कलंक को लागू करने के लिए, आप एप्पल के UIImageEffects (उनके नमूना कोड के माध्यम से उपलब्ध) का उपयोग कर सकता।

आप एप्पल के डेवलपर लाइब्रेरी से UIImageEffects के लिए कोड कॉपी कर सकते हैं: Blurring and Tinting an Image

और यहाँ है कि यह कैसे उपयोग करने के लिए है: http://stackoverflow.com/a:

#import "UIImageEffects.h" 
... 

self.yourImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]]; 

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

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