func generateMemedImage() -> UIImage {
let memeImage = imageView.image!
let newImageViewOriginAndDimension = self.view.frame
let originalImageViewOriginAndDimension = imageView.frame
rescaleImageView(newImageViewOriginAndDimension, image: memeImage)
print(imageView.frame) // has fatal error unexpectedly found nil
// other unrelated lines of code
}
func rescaleImageView(originAndDimension: CGRect, image : UIImage) {
let newImageView : UIImageView = UIImageView(frame: originAndDimension)
newImageView.image = image
imageView = newImageView
print(imageView.frame) // prints fine
}
所以我上面有两个函数可以有人向我解释为什么我能够在函数print(imageView.frame)
中运行执行rescaleImageView
而不会在generateMemedImage
函数中运行而不是错误?
我是否正确地假设当我在newImageView
函数中创建generateMemedImage
时,我实际上并没有将我的班级中的imageView
变量分配给newImageView
,而是只是在我的函数中本地重新指定指针?
答案 0 :(得分:1)
您正在将新创建的newImageView
分配到weak
媒体资源中。这就是为什么它在第一个方法范围内没有活着。它被简单地解除了分配。它适用于第二种方法,因为该对象由newImageView
常量保留。您没有将新视图添加到超级视图,因此不会保留它(也不会删除旧视图)。但是,在您的情况下创建新的UIImageView
并不合理。您所要做的就是将图像分配给现有视图。如下:
func rescaleImageView(originAndDimension: CGRect, image : UIImage) {
imageView.image = image
imageView.frame = originAndDimension
}