2014-07-05 11 views
7

मैं एक (1010 में नया) NSSplitViewItem पतन और अपनी खिड़की को स्थानांतरित करने के दौरान अनलॉक करने की कोशिश कर रहा हूं ताकि पूरी चीज को "जगह में" रखा जा सके।NSSplitViewItem पतन एनीमेशन और विंडो सेटफ्रेम विरोधाभासी

समस्या यह है कि मैं एनीमेशन में एक झटका हो रही है (जैसा कि here देखा) है।

func togglePanel(panelID: Int) { 

    if let splitViewItem = self.splitViewItems[panelID] as? NSSplitViewItem { 

      // Toggle the collapsed state 
      NSAnimationContext.runAnimationGroup({ context in 

       // special case for the left panel 
       if panelID == 0 { 
        var windowFrame = self.view.window.frame 
        let panelWidth = splitViewItem.viewController.view.frame.width 
        if splitViewItem.collapsed { 
         windowFrame.origin.x -= panelWidth 
         windowFrame.size.width += panelWidth 
        } else { 
         windowFrame.origin.x += panelWidth 
         windowFrame.size.width -= panelWidth 
        } 
        self.view.window.animator().setFrame(windowFrame, display: true) 
       } 
       splitViewItem.animator().collapsed = !splitViewItem.collapsed 
      }, completionHandler: nil) 
    } 
} 

मैं "धाराओं पार ना करें" मुद्दा (सत्र 213 से, WWDC'13) के बारे में पता कर रहा हूँ, जहां एक खिड़की का आकार बदलने:

कोड जहां मैं गिर कर रहा हूँ यह है एनीमेशन मुख्य थ्रेड पर चल रहा है और एक अलग थ्रेड पर चलने वाली कोर एनीमेशन पतन एनीमेशन एक दूसरे के साथ हस्तक्षेप करता है। मुख्य थ्रेड पर splitViewItem पतन एनीमेशन लाना गलत दृष्टिकोण की तरह लगता है और मैं एक सता भावना यह है कि मैं याद कर रहा हूँ करने का एक बेहतर तरीका है मिल गया है।

जब से मैं कहीं भी NSSplitViewItems पर किसी भी प्रलेखन नहीं मिल रहा (अभी तक) मैं इस पर कोई अंतर्दृष्टि की सराहना करेंगे।

मैं अगर किसी को भी एक नज़र चाहता GitHub here पर थोड़ा परीक्षण परियोजना है।

अद्यतन प्रस्तावित परियोजना अब समाधान के साथ अद्यतन कर दी गई है।

धन्यवाद, टेओ

उत्तर

11

समस्या के समान है कि में इस मुद्दे को वहाँ एनीमेशन आपके द्वारा बनाए गए दो ड्राइवरों रहे हैं "धाराओं पार नहीं करते": (1) विभाजित दृश्य आइटम (2) खिड़की, और वे सिंक में नहीं हैं।

'13 कोको एनिमेशन बात से उदाहरण में, सीमा के भीतर यह खिड़की एनीमेशन सही रूप में केवल खिड़की के फ्रेम एनीमेशन केवल में परिणाम की स्थापना के थे।

कुछ इसी तरह की कोशिश की जा सकती है - केवल खिड़की के फ्रेम को एनिमेट करना और स्प्लिट व्यू आइटम नहीं, लेकिन चूंकि आइटम (un) पतन के लिए उपयोग की जाने वाली बाधाओं का प्रबंधन करता है, इसलिए ऐप वास्तव में नियंत्रण नहीं कर सकता कि कैसे विंडो की सामग्री एनिमेट:

Animating Window frame

इसके बजाय विभाजित दृश्य आइटम एनीमेशन पूरी तरह से एनीमेशन ड्राइव और वर्णन करने के लिए कैसे खिड़की के फ्रेम प्रभावित होता है NSWindow के -anchorAttributeForOrientation: इस्तेमाल कर सकते हैं।

if let splitViewItem = self.splitViewItems[panelID] as? NSSplitViewItem { 
    let window = self.view.window 
    if panelID == 0 { 
     // The Trailing edge of the window is "anchored", alternatively it could be the Right edge 
     window.setAnchorAttribute(.Trailing, forOrientation:.Horizontal) 
    } 
    splitViewItem.animator().collapsed = !splitViewItem.collapsed 
} 

Animating SplitViewItem

+0

शानदार, धन्यवाद। अच्छा स्पष्ट जवाब और बिंदु समाधान के लिए। –

+0

इस मामले में किसी समूह में पतन एनीमेशन को लपेटने की कोई आवश्यकता नहीं है। –

+0

अच्छा बिंदु! मैंने इसे हटा दिया है। – Taylor

1

उद्देश्य सी का उपयोग कर और 10.11 एल कैप्टन को लक्षित किसी के लिए। यह मेरे लिए चाल किया AnchorAttributes निर्धारित करने की आवश्यकता नहीं किया था।

splitViewItem.collapsed = YES; 
संबंधित मुद्दे