【问题标题】:UIImage in a UIImageVIew in a UIScrollViewUIScrollView 中的 UIImageVIew 中的 UIImage
【发布时间】:2012-04-18 00:35:19
【问题描述】:

我放弃了。似乎无法使这个非常基本的事情起作用。请帮忙...

我正在尝试将图像从 URL 加载到可滚动、可捏合/缩放的屏幕上。

这是我的代码 sn-p,它会产生一个空白屏幕。我选择将它放在 viewDidAppear 中:

@property (weak, nonatomic) UIScrollView *scrollView;
@property (weak, nonatomic) UIImageView *imageView;

...

- (void)viewDidAppear:(BOOL)animated {

    NSData *photoData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlForImage]];
    UIImage *photoImage = [[UIImage alloc] initWithData:photoData];

    self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
    [self.scrollView setContentSize:photoImage.size];
    [self.scrollView setMinimumZoomScale:1];
    [self.scrollView setMaximumZoomScale:5];
    [self.view addSubview:self.scrollView];

    self.imageView = [[UIImageView alloc] initWithImage:photoImage];
    [self.imageView setContentMode:UIViewContentModeScaleAspectFit];
    [self.imageView setFrame:self.view.frame];
    [self.scrollView addSubview:self.imageView];

}

我也实现了 viewForZoomingInScrollView:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{ 
    return self.imageView;
}

我得到一个白屏。我错过了什么?提前谢谢你。

【问题讨论】:

  • 首先确保上面没有任何内容(例如照片图像)为 nil。然后我会在你的滚动视图中添加一个简单的标签,看看你是否能看到。
  • 谢谢。我几乎可以肯定照片图像不是零。通过断点,我看到变量 photoData 和 photoImage 具有值。我也 NSLog 网址,它在浏览器中是有效的。
  • 您将属性声明为弱而不是强有什么原因?
  • jonkroll,你发现了问题。当我将属性声明为强时,它解决了它。谢谢。

标签: objective-c ios uiscrollview uiimageview uiimage


【解决方案1】:

正如@jonkroll 建议的那样,问题在于您将保留对象分配给弱变量。它不像 IBOutlet,which should generally be weak。在这里,您肯定想将其更改为强,它应该可以解决您的问题。

为了演示当前的问题,例如,如果你在 alloc/init 语句之后为 scrollView 加上下面的语句,你可能会惊讶地发现它是 nil,因为 ARC 已经为你发布了它,例如:

NSLog(@"scrollView = %p", scrollView);

让它们变得强大,你就可以了。如果你只用 scrollView 和 imageView 替换你的 self.scrollView 和 self.imageView,你可能会看到编译器警告。

或者,如果您出于其他原因不需要这些变量,您也可以完全忘记将它们设置为属性,并将它们设置为 viewDidLoad 方法的本地变量(当您将它们添加为子视图时,视图本身将被保留。 .. 没有理由将它们设为属性或 ivars,除非您出于某种原因在其他方法中需要 var)。除非需要,否则我不喜欢添加属性或 ivars。如果你需要它们,很好,你需要它们,但如果你不需要它们,请将它们设为本地 viewDidLoad 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-18
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2011-07-20
    • 1970-01-01
    相关资源
    最近更新 更多