2012-04-19 147 views
0

我有一個類的方法,我想在下面執行這段代碼。問題是在類方法中,你不能使用像self.view這樣的東西。所以我有點卡在這裏。我發現了一些關於使用[self class]的東西,但我並不真正瞭解如何在我的代碼中使用它。在課堂上用自己的方法

for (UIView *view in [self.view subviews]) 
    { 
     if([view isKindOfClass:[Circle class]]) { 

      [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationCurveLinear animations:^{ 
       view.alpha = 0; 
       view.frame = CGRectMake(self.view.frame.size.width/2-35, self.view.frame.size.height/2-35, 70, 70); 
      } completion:nil]; 

      [view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.4]; 
     } else { 
      // 
     } 
    } 

更新的詳細信息

我有一個Circle類。 在I類有這個方法

- (IBAction)playerTap:(id)sender { 


    NSString *numberString; 
    numberString = [NSString stringWithFormat:@"%i",indexNumber+1]; 

    if (indexNumber < 14) 
    { 


    if ([label.text isEqualToString:numberString]) 
    { 
    [UIView animateWithDuration:0.1 animations:^{ 


     self.transform = CGAffineTransformMakeScale(1.2, 1.2); 

    } completion:^(BOOL finished) { 

     [UIView animateWithDuration:0.05 animations:^{ 
      self.transform = CGAffineTransformIdentity; 
      self.alpha = 0.2; 

     } completion:nil]; 

    }]; 

    ++indexNumber; 
    } 
    } else { 

     self.alpha = 0.2; 

     [NUMViewController gameHasEnded]; 

    } 

} 

當indexNumber(靜態變量)已經達到了一定的我想在我NUMViewController類中的方法進行。 I.E. 「gameHasEnded」方法。

這將是一個方法與本文開頭的代碼。它會從視圖中移除所有其他的圓形實例。

類方法對我來說似乎是最合乎邏輯的,因爲我沒有在圓對象上執行該方法,但它會影響其他類中的所有對象。

回答

3

有一個調用self.view的類方法是沒有意義的。該班級沒有view,也無法知道您的意思。你爲什麼用類方法做這件事?將其移至實例。如果你有一個共享的單例實例,比類方法可以引用它,但這通常是一個壞主意,如果可能的話應該避免(因爲它將你的類連接到單例)。

+0

是的,我明白。我已經添加了一些關於我的意圖的更多信息。但我不確定我應該如何使用實例方法來做到這一點。我不斷收到無法識別的選擇器錯誤。 – 2012-04-19 16:38:53

+0

你應該將'indexNumber'移​​動到一個模型類(可能是一個單例對象),可能類似於'Game'。當索引達到0時,「遊戲」會發布像GameEndedNotification這樣的通知。視圖控制器會觀察並清除它的視圖。這裏的關鍵是分離模型,視圖和控制器類。但是這裏沒有理由使用類方法或靜態變量。 – 2012-04-19 19:45:42

+0

好的謝謝。我會試試這個。這整個MVC的東西仍然有點模糊,我要正確把握。 – 2012-04-19 20:38:48