2010-06-16 97 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。

相关问题