2016-05-14 2 views
5

समायोजित करें की ब्लर त्रिज्या और पारदर्शिता को समायोजित करना संभव है जब यह NSWindow (स्विफ्ट या ऑब्जेक्टिव-सी) पर लागू होता है? मैंने NSVisualEffectMaterial (अंधेरा, मध्यम, प्रकाश) की सभी भिन्नताओं की कोशिश की - लेकिन यह इसे काट नहीं रहा है। नीचे दी गई छवि में मैंने बाईं ओर CGSSetWindowBackgroundBlurRadius और दाईं ओर NSVisualEffectView के साथ ऐप्पल के गैर-सार्वजनिक API का उपयोग किया है।NSVisualEffectView धुंध त्रिज्या और पारदर्शिता

enter image description here

मैं क्या बाईं तरफ है के रूप को प्राप्त करने के लिए कोशिश कर रहा हूँ, लेकिन ऐसा लगता है मैं सही के तरीकों का उपयोग की चपेट में आ गया हूँ। संभवत:

blurView.blendingMode = NSVisualEffectBlendingMode.BehindWindow 
blurView.material = NSVisualEffectMaterial.Medium 
blurView.state = NSVisualEffectState.Active 
self.window!.contentView!.addSubview(blurView) 

, संबंधित - लेकिन मेरे सवाल का जवाब नहीं है:

यहाँ मेरी कोड है

उत्तर

2

हालांकि मैं इस की सिफारिश नहीं होगा जब तक कि आप भविष्य में रिलीज में काम नहीं कर रहे हैं, तब तक आप वापस आने के लिए तैयार नहीं हैं, आप जो भी चाहते हैं उसे करने के लिए निम्नलिखित के साथ NSVisualEffectView उपclass कर सकते हैं:

- (void)updateLayer 
{ 
    [super updateLayer]; 

    [CATransaction begin]; 
    [CATransaction setDisableActions:YES]; 

    CALayer *backdropLayer = self.layer.sublayers.firstObject; 

    if ([backdropLayer.name hasPrefix:@"kCUIVariantMac"]) { 
     for (CALayer *activeLayer in backdropLayer.sublayers) { 
      if ([activeLayer.name isEqualToString:@"Active"]) { 
       for (CALayer *sublayer in activeLayer.sublayers) { 
        if ([sublayer.name isEqualToString:@"Backdrop"]) { 
         for (id filter in sublayer.filters) { 
          if ([filter respondsToSelector:@selector(name)] && [[filter name] isEqualToString:@"blur"]) { 
           if ([filter respondsToSelector:@selector(setValue:forKey:)]) { 
            [filter setValue:@5 forKey:@"inputRadius"]; 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 

    [CATransaction commit]; 
} 

हालांकि इस निजी एपीआई का उपयोग नहीं करता दर असल, यह परत पदानुक्रम जो आपकी नहीं है, इसलिए दोबारा जांच करें कि क्या तुम वापस हो रही है कि आप क्या उम्मीद है के लिए सुनिश्चित हो में खुदाई करने के लिए शुरू होता है, और अगर नहीं तो कृपा से विफल। उदाहरण के लिए, 10.10 योसेमेट पर, Backdrop परत दृश्य प्रभाव दृश्य का प्रत्यक्ष देवता था, इसलिए भविष्य में चीजें बदलने की संभावना है।

+0

हाय, उत्तर के लिए धन्यवाद, लेकिन दुर्भाग्यवश यह पारदर्शिता को समायोजित नहीं करता है। –

+0

यह उदाहरण विंडो ब्लर्स के भीतर था, इसलिए आपको इच्छित परत प्राप्त करने के लिए परत पदानुक्रम के चारों ओर पोक करने की आवश्यकता हो सकती है। 'UpdateLayer' में ब्रेकपॉइंट सेट करें, और यह देखने के लिए कि आपको अपने दृश्य प्रभाव दृश्य में क्या खोजना है, उसे लगातार' po self.layer.sublayers 'पर कॉल करें। सुविधाजनक रूप से, अधिकांश परतों का नाम दिया जाता है, इसलिए आप उस तरह से थोड़ा कम ड्रिल कर सकते हैं। मेरा मानना ​​है कि 'टिंट' नामक एक और परत है जो कलर टिंट को भी नियंत्रित करती है। –

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