在下面的代码中,我有一个视图对象,它是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];
欢呼加里。
答案 0 :(得分:3)
如果您在自己的类中定义了实例变量,您当然可以将其声明为:
类定义中的UIScrollView *view;
。如果你已经定义了另一个在定义中有UIView *view;
的类(我怀疑这是这里的情况),那么你上面这样做的方式可能是满足编译器的最好方法。
您可能还需要添加一个断言来检查该点的视图类,以便在出现问题时获得合理的错误消息。
答案 1 :(得分:1)
UIScrollView继承自UIView,因此将调用更改为此类应该有效:
[self addSubview:imageView];
答案 2 :(得分:0)
编译器不会猜测类型,它使用您声明的类型。 self.view必须是UIView,这就是为什么当你尝试setContentSize时会收到警告,因为你声明该视图是一个UIView。
当你转换时告诉编译器,这实际上是一个UIScrollView,所以它不再发出警告。如果它确实是一个UIScrollView,那么你的view属性应该被声明为UIScrollView。