2011-02-15 17 views
34

मैं अपने नेविगेशन बार के आरएचएस पर दो बटनों के बीच स्वैप करने के लिए अपने कोड में -(void)setEditing:(BOOL)editing animated:(BOOL)animated विधि को कॉल कर रहा हूं।UINavigationBar में एक बटन परिवर्तन को एनिमेट कैसे करें?

-(void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 

    // Toggle ‘+’ and ‘Add To Order’ button.  

    if(editing) { 
    self.navigationItem.rightBarButtonItem = self.addItemButton; 
    } 
    else {   
    self.navigationItem.rightBarButtonItem = self.addToOrderButton; 
    } 
} 

कहाँ self.addItemButton और self.addToOrderButtonawakefromNib में पूर्वनिर्धारित UIBarButtonItems, सेटअप युक्त ivars हैं।

self.addToOrderButton में बटन काफी व्यापक तो self.addItemButton में से एक है, इसलिए मैं उनके लिए करना चाहते हैं दो चौड़ाई के बीच एक सूक्ष्म एनीमेशन होने के लिए जब संपादन राज्य में परिवर्तन शुरू हो रहा है (के एलएचएस पर एक मानक editButtonItem दोहन से नेविगेशन।

अगर मैं चारों ओर [UIView beginAnimations:nil context:NULL]; और [UIView commitAnimations]; बटन परिवर्तन चेतन है, लेकिन उनके स्थान पर की तुलना में से ऊपरी बाएं बल्कि अलग-अलग जगह में पदों उड़ान और सिर्फ अपने चौड़ाई एनिमेट साथ साथ पूरे if:else

मैं नेविगेशन बार तत्व को कैसे एनिमेट करता हूं एस ताकि प्रत्येक व्यक्ति एक (आरएचएस बटन, शीर्षक) अधिक उचित, संयम तरीकों से एनिमेट हो?

[self.navigationItem setRightBarButtonItem: self.addToOrderButton animated:YES]; 

... जो यह तुम्हारे लिए चेतन जाएगा:

उत्तर

67
self.navigationItem.rightBarButtonItem = self.addToOrderButton; 

विशिष्ट विधियों आप दाएं और बाएं बार बटन आइटम चेतन करने के लिए उपयोग कर सकते हैं कर रहे हैं। यदि आपको एनिमेट करने के लिए सबकुछ चाहिए (शीर्षक सहित) आप अपने नेविगेशन बार के setItems:animated: विधि का उपयोग भी कर सकते हैं (इसे नेविगेशन आइटम्स की एक सरणी में पास करें जिसे आप प्रदर्शित करना चाहते हैं)

+0

मैंने जवाब स्वीकार कर लिया है, जैसा कि मैंने जवाब स्वीकार कर लिया है यह वही करता है जो आप वर्णन करते हैं और ठीक काम करता है। बहुत धन्यवाद। एक तरफ, क्या वास्तविक एनीमेशन को ट्विक करने का कोई तरीका है? जैसा कि यहां प्रस्तुत किया गया है, यह एक क्रॉस-फीड-जो ठीक है-लेकिन टेक्स्ट के लिए क्रॉस-फीड का संयोजन और 'फ्रेम' के लिए बटन एलएचएस के एनिमेटेड मूव का संयोजन बेहतर होगा। – creednmd

+1

एसडीके में कोई सीधी विधि नहीं है, नहीं। आप शायद कुछ खुद को लागू कर सकते हैं, लेकिन यह गैर-तुच्छ (कुछ श्रेणी के साथ विधि को ओवरराइड करने और इसे अपने स्वयं के संक्रमण से बदलना) जैसा होगा। – lxt

+0

ऐसा लगता है कि मुझे दस्तावेज़ों का अध्ययन करने की आवश्यकता होगी; हालांकि मुझे सही रास्ते पर लाने के लिए धन्यवाद। – creednmd

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