2015-11-20 8 views
6

मेरे पास एक दृश्य में एम्बेडेड बटन है, जो UIBarButtonItem के अंदर है। मैं जो हासिल करना चाहता हूं वह एनीमेशन बनाना है, जो मेरे बटन को कुछ निश्चित मात्रा से दाईं ओर ले जाता है जब मैं बाएं से स्लाइडिंग मेनू खोल रहा हूं और जब मैं इसे बंद कर रहा हूं तो वापस चला जाता है।नेविगेशन बार पर UIView एनीमेशन कभी-कभी गलत काम करता है

मैं इसे बनाने के लिए इस समारोह का उपयोग कर रहा:

static func createMenuButton(controller:UIViewController) -> UIBarButtonItem { 
    let target = controller.navigationController!.parentViewController! 
    let menuImage = UIImage(named: "menu.png")!.imageWithRenderingMode(.AlwaysTemplate) 
    let menuButton = UIButton(frame: CGRectMake(0, 0, 22, 22)) 
    menuButton.tintColor = UIColor.blackColor() 
    menuButton.setBackgroundImage(menuImage, forState: .Normal) 
    menuButton.addTarget(target, action: Selector("toggleMenuClicked:"), forControlEvents:.TouchUpInside) 
    let menuButtonContainer = UIView(frame: menuButton.frame) 
    menuButtonContainer.addSubview(menuButton) 
    let menuButtonItem = UIBarButtonItem(customView: menuButtonContainer) 
    return menuButtonItem 
} 

मैं भी घुमाना चाहते हैं, लेकिन मैं एक ही समय में 2 गुणों को बदलने के साथ कुछ मुद्दों मिल गया है।

कंटेनर अनुवाद (CGAffine द्वारा अनुवाद ठीक से काम नहीं किया था):

UIView.animateWithDuration(0.3, animations: { 
      menuContainerView.frame = CGRectOffset(menuContainerView.frame, 183, 0.0) 
      }, completion: nil) 
तो मैं 2 अलग एनिमेशन (यह, उद्घाटन के लिए है उन्हें बंद करने से ही है के लिए लेकिन विपरीत दिशा में) बनाने का फैसला किया गया है

अंदर घुमाएं बटन:

UIView.animateWithDuration(0.3, animations: { 
      menuButton.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2)) 
      }, completion: nil) 

यह काम करता है - 90% मामलों में। लेकिन कभी-कभी - बंद होने पर - स्क्रीन के बाहर बटन टेलीपोर्ट और वहां से अंत बिंदु की ओर बढ़ता है।

एक ही समय में मैं भी स्क्रीन (ठीक विपरीत मूल्यों को बंद करने के लिए एक ही) के बाहर से मेनू दृश्य नियंत्रक चलती हूँ:

UIView.animateWithDuration(0.3, animations: { 
     self.leftViewController!.view.frame = CGRect(x: 0, y: self.view.frame.origin.y, width: 183, height: self.view.frame.height) 
     }, completion: { (Bool) -> Void in 
      self.menuShown = true 
    }) 

मैं भी रंग नेविगेशन पट्टी पर रंग साफ करने के लिए बदल रहा हूँ जब इसे खोला जाता है और इसे खोले जाने पर डिफ़ॉल्ट रंग में वापस किया जाता है।

जब यह टूट जाता है तो यह बहुत अच्छा नहीं लग रहा है। क्या कारण हो सकता है? मेरे द्वारा यह कैसे किया जा सकता है?

+0

बस एक नोट: मैं पहले से ही नींद का उपयोग कर रहा हूं, लेकिन यह हमेशा वैसे भी काम नहीं करता है। मुझे कुछ साफ समाधान की आवश्यकता है :) – Makalele

उत्तर

2

मैंने हाल ही में आपके द्वारा वर्णित एक ही सेटअप के साथ एक ही समस्या में भाग लिया। यह मुझे कोशिश करने और इसे काम करने के लिए बहुत कुछ ले गया, और यह अभी भी 100% नहीं है, लेकिन एक चीज जो मुझे करना है, वह इसे अधिकांश समय तक काम कर रहा था, एक प्रेषण कतार बना रहा था और बाद में उस कतार के अंदर अपना पूरा करने वाला एनिमेशन लगा रहा था एक सेकंड के सिर्फ दसवें इंतज़ार कर रहे हैं। मुझे लगता है कि इसे फ्रेम के साथ करना है जो अभी तक सेट नहीं किया जा रहा है जब पूरा करने वाले हैंडलर को बुलाया जाता है, भले ही आपको लगता है कि यह होगा, लेकिन यह मेरे लिए काम करता है, उम्मीद है कि यह आपकी मदद कर सकता है।

completion: { (Bool) -> Void in 
    let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.05 * Double(NSEC_PER_SEC))) 
    dispatch_after(delayTime, dispatch_get_main_queue()) { 
    self.menuShown = true 
}) 
+0

मैं यह बताना भूल जाता हूं कि मैं पहले से ही नींद का उपयोग कर रहा हूं: डी यह सिर्फ कोड के दूसरे हिस्से में है। इसके बिना यह हमेशा बुरा है। – Makalele

+0

हाहा डर्न, उम्मीद कर रहा था कि मैं मदद कर सकता हूं! लेकिन हाँ, मैं तुम्हारे जैसा ही स्थान पर हूं। – pbush25

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