我有一個barButtonItem調用一個動作,它交換動畫塊中的兩個視圖。我在它調用的動作方法的開頭禁用了barButtonItem
,並且我想在完成時啓用它,以便用戶在翻轉完成之前不能再次翻轉視圖。傳遞參數在iPhone中的選擇器
它在UIView動畫塊中這樣做,所以如果我在方法的ned中啓用它,它將是即時的並且破壞目的,因爲它在動畫完成之前被啓用。
在該方法中,我將發件人轉換爲UIBarButtonItem,並將其禁用。所以我找到了[UIView setAnimationDidStopSelector:@selector()]
,但我需要在選擇器中傳遞我的barButtonItem,所以enableControl方法將啓用它(如果我可以創建一個匿名函數,這會更容易)。
那麼我怎麼能通過barButton作爲一個參數?我寧願沒有做出伊娃只是這個..下面的代碼:
- (void)barBtnItemSwitchViews_Clicked:(id)sender {
UIBarButtonItem *barButton = (UIBarButtonItem *)sender;
barButton.enabled = NO;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
if(!self.yellowVC.view.superview) {
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:innerView cache:YES];
[yellowVC viewWillAppear:YES];
[blueVC viewWillDisappear:YES];
[blueVC.view removeFromSuperview];
self.blueVC = nil;
[innerView addSubview:yellowVC.view];
} else if(!self.blueVC.view.superview) {
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:innerView cache:YES];
[blueVC viewWillAppear:YES];
[yellowVC viewWillDisappear:YES];
[yellowVC.view removeFromSuperview];
self.yellowVC = nil;
[innerView addSubview:blueVC.view];
}
[UIView commitAnimations];
[UIView setAnimationDidStopSelector:@selector(enableControl:)]; // How do I pass barButton??
}
- (void)enableControl:(UIControl *)control {
control.enabled = YES;
}
這裏就是我把它改成,但該方法不被稱爲..我在做什麼錯誤?
- (void)barBtnItemSwitchViews_Clicked:(id)sender {
UIBarButtonItem *barButton = (UIBarButtonItem *)sender;
barButton.enabled = NO;
[UIView beginAnimations:nil context:barButton];
[UIView setAnimationDuration:0.8];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
if(!self.yellowVC.view.superview) {
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:innerView cache:YES];
[yellowVC viewWillAppear:YES];
[blueVC viewWillDisappear:YES];
[blueVC.view removeFromSuperview];
self.blueVC = nil;
[innerView addSubview:yellowVC.view];
} else if(!self.blueVC.view.superview) {
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:innerView cache:YES];
[blueVC viewWillAppear:YES];
[yellowVC viewWillDisappear:YES];
[yellowVC.view removeFromSuperview];
self.yellowVC = nil;
[innerView addSubview:blueVC.view];
}
[UIView setAnimationDidStopSelector:@selector(flipViewAnimationDidStop:finished:context:)];
[UIView commitAnimations];
}
- (void)flipViewAnimationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
UIBarButtonItem *barButton = (UIBarButtonItem *)context;
barButton.enabled = NO;
NSLog(@"Disabled");
}
編輯:我想通了。我必須將按鈕作爲上下文,然後執行setAnimationDelegate:self
,然後setAnimationDidEndSelector:@selector(myMethod:finished:context:)
,然後在方法上下文中將其轉換爲uibarbuttonitem
並重新啓用它。
當你編輯,不要刪除原來的問題... – 2009-08-03 21:31:53
我把我原來的問題回來。 – mk12 2009-08-18 22:44:15