2010-06-16 130 views
1

在下面的代碼我有一個UIScrollView中的實例的視圖對象,如果我運行下面的代碼,我得到警告說,"UIView might not respond to -setContentSize etc."投射指定未知對象類型?

UIImage *image = [UIImage imageNamed:@"Snowy_UK.jpg"]; 
imageView = [[UIImageView alloc] initWithImage:image]; 
[[self view] addSubview:imageView]; 
[[self view] setContentSize:[image size]]; 
[[self view] setMaximumZoomScale:2.0]; 
[[self view] setMinimumZoomScale: [[self view] bounds].size.width/[image size].width]; 

我已經檢查了對象的類型和[self view]確實是一個UIScrollView。我猜測這只是編譯器對這個類型做出錯誤的猜測,而解決方案只是簡單地將對象轉換爲正確的類型,我是否正確?

UIScrollView *scrollView = (UIScrollView *)[self view]; 

UIImage *image = [UIImage imageNamed:@"Snowy_UK.jpg"]; 
imageView = [[UIImageView alloc] initWithImage:image]; 
[[self view] addSubview:imageView]; 
[scrollView setContentSize:[image size]]; 
[scrollView setMaximumZoomScale:2.0]; 
[scrollView setMinimumZoomScale: [scrollView bounds].size.width/[image size].width]; 

乾杯加里。

回答

3

如果您在自己的類中定義了實例變量,那麼您當然可以在類定義中聲明它爲: UIScrollView *view;。如果你已經定義了另一個在定義中有UIView *view;的類(我懷疑是這種情況),那麼你上面這樣做可能是滿足編譯器的最好方法。

您可能還想添加一個斷言來檢查當時視圖的類,以便在出現錯誤時獲得合理的錯誤消息。

+0

嗨,馬克,我在IB中設置了UIViewController,刪除了視圖並用UIScrollView替換了它。當我將fileOwner重新連接到新的UIScrollView時,我必須使用view來完成,這基本上是爲什麼後來編譯器認爲它是視圖而不是scrollView。感謝您的提示,這很好地工作。 – fuzzygoat 2010-06-16 16:24:30

1

的UIScrollView UIView的,從繼承,所以改變你的呼叫這樣的事情應該工作:

[self addSubview:imageView]; 
0

編譯器不猜測類型,它使用聲明的類型。 self.view必須是一個UIView,這就是爲什麼當你嘗試setContentSize時會得到一個警告,因爲你聲明該視圖是一個UIView。

當你投了你告訴編譯器,這真的是一個UIScrollView,所以它不再給出警告。如果它真的是一個UIScrollView,那麼你的視圖屬性應該被聲明爲一個UIScrollView。

相關問題