2011-10-22 67 views
0

我想有一個指向UIImage視圖的指針,這樣我就不必重複很多我的代碼。我需要根據它是哪個按鈕來選擇圖像,但最後我將相同的代碼應用於任何數字。 oneDigit,twoDigitthreeDigit都是頭文件中的@property(nonatomic, retain)。我希望imageView能夠指向這些UIImageView中的一個。現在UIImageViews不會被刪除removeFromSuperview,因爲imageView不是指向的對象,但創建自己的對象..你如何設置UIImageView指向另一個UIImageView

當前當按鈕被按下時,一個圖像被添加。我想刪除前一張圖片,並根據按下的按鈕繪製新圖片。代碼的工作原理是如何將imageView替換爲oneDigit,但這需要我爲每個變量添加更多代碼。

見簡單的例子如下:

- (void)viewDidLoad 
{ ... 
    UIImageView *oneDigit; 
    UIImageView *twoDigit; 
    UIImageView *threeDigit; 
} 

-(IBAction)pressButton:(id)sender { 
    UIImage *image; 
    UIImageView *imageView; 
    UIButton *btn = (UIButton*)sender; 
    int value = [btn.titleLabel.text intValue]; 
    switch (value) { 
     case 10: 
     case 15: 
     case 20: 
      [twoDigit removeFromSuperview]; //Remove old image from screen 
      imageView = twoDigit; //Update imageView pointer for current case 
      image = [UIImage imageNamed:@"twoDigit.png"]; 
      break; 
     case 1: 
     case 2: 
     case 3: 
     case 4: 
     case 5: 
      [oneDigit removeFromSuperview]; 
      imageView = oneDigit; 
      image = [UIImage imageNamed:@"oneDigit.png"]; 
      break; 
     case 100: 
     case 200: 
     case 300: 
      [threeDigit removeFromSuperview]; 
      imageView = threeDigit; 
      image = [UIImage imageNamed:@"threeDigit.png"]; 
      break; 
     default: 
      break; 
    } 
    CGPoint point = btn.frame.origin; 
    CGFloat xposition = point.x - ((image.size.width - btn.frame.size.width) /2); 
    CGFloat yposition = point.y - ((image.size.height - btn.frame.size.height) /2); 
    imageView = [ [ UIImageView alloc ] initWithFrame:CGRectMake(xposition, yposition, image.size.width, image.size.height) ]; 
    imageView.image = image; 
    imageView.contentMode = UIViewContentModeCenter; 
    [self.view addSubview:imageView]; 
} 
+0

你「想要一個指向UIImageView的指針」,並且你的代碼包含一個指向UIImageView的指針。什麼是真正的問題?代碼不喜歡什麼? –

+0

何時何地將值賦給'oneDigit','twoDigit'和'threeDigit'?在你的每個case語句中,你發送'removeFromSuperView'消息給它們,然後把它們分配給'imageView'。然後你創建一個新的'UIImageView'並將其分配給'imageView'。當然,無論你初始化「oneDigit」等,然後丟失? –

+0

已更新的問題。我希望imageView指向oneDigit,以便方法末尾的代碼可以用於所有情況,但是當方法再次運行時,它將從屏幕中刪除一個數字。使用imageView它不會從屏幕上刪除任何東西。 – michaellindahl

回答

0

假設oneDigit,twoDigit和threeDigit是UIImageViews的,你可以做同樣的事情到

imageView = oneDigit; 

由於兩者都是指針,設置ImageView的到oneDigit會只需將imageView指向oneDigit的位置即可。當您將它設置爲新圖像時,請不要先自動釋放它,因爲如果它設置爲threeDigit,則它也會自動釋放threeDigit。

另外,將imageView設置爲新圖像後,您不需要手動設置imageView的圖像屬性,因爲它本質上是引用具有相同圖像的完全相同的UIImageView;這只是一個不同的名字。

+0

我沒有進行任何autoreleasing,因爲我處於ARC模式。這不起作用,因爲它在不同的位置多次繪製圖像。我想要將圖像移除,然後使用適當的圖像在新位置重繪。 – michaellindahl

+0

這是因爲您正在初始化代碼底部的imageView,這意味着它不再指向oneDigit,而是指向一個新對象。你應該在底部做什麼而不是初始化它並設置圖像屬性,將imageView的框架設置爲你想要的新框架。 – orangething

+0

謝謝。我一直在修改代碼,所以我沒有理解。我認爲這是我需要做的,但我又犯了一個錯誤,我將該行修改爲'imageView.frame = CGRectMake(xposition,yposition,image.size.width,image.size.height);'然後將' UIImageView * imageView = [[UIImageView alloc] init];'在交換機之前,但它仍然不工作。這次我忽略了什麼? – michaellindahl

相關問題