2012-09-04 16 views
7

ठीक है, हर कोई जानता है ObjC में हमएनएसएक्शन के लिए तर्क कैसे पास करें?

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion 

सूचना है कि completion ब्लॉक एक BOOL तर्क है है। किसी भी तर्क के बिना

public delegate void NSAction(); 

बस प्रतिनिधि: अब Monotouch को देखो:

public static void Animate (double duration, double delay, UIViewAnimationOptions options, NSAction animation, NSAction completion) 

NSAction है। इसके अलावा, Monotouch "आंतरिक" में हम देख सकते हैं:

public static void Animate (double duration, double delay, UIViewAnimationOptions options, 
NSAction animation, NSAction completion) 
{ 
    UIView.AnimateNotify (duration, delay, options, animation, delegate (bool x) 
    { 
     if (completion != null) 
     { 
      completion(); 
     } 
    }); 
} 

सूचना delegate (bool x), यह समारोह की तरह ही मैं की जरूरत है कहते हैं। अब, मैं UIView.Animate पर पूरा होने के रूप में Action<bool> कैसे पास कर सकता हूं?

उत्तर

8

कि एक वर्ष बाध्यकारी बग (गलत प्रकार) था और अनुकूलता कारण के लिए,, Animate अभी भी एक NSAction पूरा होने हैंडलर का उपयोग करें।

इसे ठीक करने के लिए AnimateNotify को मोनो टच में जोड़ा गया था। इस संस्करण में एक UICompletionHandler जो इस तरह परिभाषित किया गया है स्वीकार करते हैं:

public delegate void UICompletionHandler (bool finished); 

तो आपकी समस्या का हल नए AnimateNotify एपीआई का उपयोग करने के लिए है।

UIView.AnimateNotify(duration, 0, UIViewAnimationOptions.CurveEaseInOut, delegate() { 

}, delegate (bool finished) { 

}); 

या लैम्ब्डा सिंटैक्स के साथ:

+0

आपको लगता है यह पुरानी आवरण दूर करने के लिए समय आ गया है नहीं है? –

+0

@ मैक्सिम: मुझे कल्पना है कि इसे रात भर हटाने के लिए अधिक होगा। लेकिन यह obsoleting यह मेरे लिए एक अच्छा विचार की तरह लगता है। (मैं एक एमटी देव नहीं हूं, सिर्फ एक उपयोगकर्ता।) –

5

ताकि तरह दिखना चाहिए

UIView.AnimateNotify(duration, 0, UIViewAnimationOptions.CurveEaseInOut,() => { 

}, (finished) => { 

});