以不同尺寸显示的图像视图 - Swift
Image Views showing in different sizes - Swift
我在同一个 VC 的 2 个不同代码部分的视图(在 Storyboard 中创建)中以编程方式创建一些图像视图,但我得到了不同的结果。
这是我的代码:
var images: Int?
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
switch images {
case 0:
imagesCount = countImages.noImage
case 1:
imageView1 = UIImageView(frame: CGRect(x: 0, y: 0, width: Int((viewForImages.frame.width)), height: Int((viewForImages.frame.height))))
imageView1.image = UIImage(data: imageData1!)
viewForImages.addSubview(imageView1)
case 2:
for view in self.viewForImages.subviews {
view.removeFromSuperview()
}
imageView1 = UIImageView(frame: CGRect(x: 0, y: 0, width: Int((viewForImages.frame.width) / 2) - 1, height: Int((viewForImages.frame.height))))
imageView1.image = UIImage(data: imageData1!)
viewForImages.addSubview(imageView1)
imageView2 = UIImageView(frame: CGRect(x: Int(imageView1.frame.width) + 1, y: 0, width: Int((viewForImages.frame.width) / 2), height: Int(viewForImages.frame.height)))
imageView2.image = UIImage(data: imageData2!)
viewForImages.addSubview(imageView2)
case 3:
for view in self.viewForImages.subviews {
view.removeFromSuperview()
}
imageView1 = UIImageView(frame: CGRect(x: 0, y: 0, width: Int((viewForImages.frame.width) / 2) - 1, height: Int((viewForImages.frame.height))))
imageView1.image = UIImage(data: imageData1!)
viewForImages.addSubview(imageView1)
imageView2 = UIImageView(frame: CGRect(x: Int((viewForImages.frame.width) / 2) + 1, y: 0, width: Int((viewForImages.frame.width) / 2), height: Int((viewForImages.frame.height) / 2) - 1))
imageView2.image = UIImage(data: imageData2!)
viewForImages.addSubview(imageView2)
imageView3 = UIImageView(frame: CGRect(x: Int((viewForImages.frame.width) / 2) + 1, y: Int(imageView2.frame.height) + 1, width: Int((viewForImages.frame.width) / 2), height: Int((viewForImages.frame.height)) / 2))
imageView3.image = UIImage(data: imageData3!)
viewForImages.addSubview(imageView3)
default:
break
}
}
上面的代码正确显示了图像视图,但我也将这些图像保存在核心数据中,当我再次打开此视图时,然后在 viewDidLoad() 中,我添加了以下代码:
override func viewDidLoad() {
super.viewDidLoad()
self.imageView1 = UIImageView(frame: CGRect(x: 0, y: 0, width: Int((viewForImages.frame.width) / 2) - 1, height: Int((viewForImages.frame.height))))
if let data = entry.imageData1 {
self.imageView1.image = UIImage(data: data)
}
viewForImages.addSubview(imageView1)
self.imageView2 = UIImageView(frame: CGRect(x: Int((viewForImages.frame.width) / 2) + 1, y: 0, width: Int((viewForImages.frame.width) / 2), height: Int((viewForImages.frame.height) / 2) - 1))
if let data = entry.imageData2 {
self.imageView2.image = UIImage(data: data)
}
viewForImages.addSubview(imageView2)
self.imageView3 = UIImageView(frame: CGRect(x: Int((viewForImages.frame.width) / 2) + 1, y: Int(imageView2.frame.height) + 1, width: Int((viewForImages.frame.width) / 2), height: Int((viewForImages.frame.height)) / 2))
if let data = entry.imageData3 {
self.imageView3.image = UIImage(data: data)
}
viewForImages.addSubview(imageView3)
}
因此,每当 VC 加载时,图像如下所示:
注意:viewForImages 是我使用 Storyboard 创建的视图,entry 是一个具有 3 个属性的实体:二进制数据 (NSData) 类型的图像 Data1、2、3。
现在当这个视图出现时,如果视图已经有图像,它会运行上面的代码,但是首先 imageView1 覆盖了大约 80% 的视图,而其他 2 个图像视图很少出现。为什么会这样?
尝试改变内容模式
imageView.contentMode = .ScaleAspectFill
好的,我明白了。
在 viewDiDLoad()
方法中,在 switch
语句之前,我添加了以下行,现在可以使用了。
self.viewForImages.layoutIfNeeded()
我在同一个 VC 的 2 个不同代码部分的视图(在 Storyboard 中创建)中以编程方式创建一些图像视图,但我得到了不同的结果。 这是我的代码:
var images: Int?
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
switch images {
case 0:
imagesCount = countImages.noImage
case 1:
imageView1 = UIImageView(frame: CGRect(x: 0, y: 0, width: Int((viewForImages.frame.width)), height: Int((viewForImages.frame.height))))
imageView1.image = UIImage(data: imageData1!)
viewForImages.addSubview(imageView1)
case 2:
for view in self.viewForImages.subviews {
view.removeFromSuperview()
}
imageView1 = UIImageView(frame: CGRect(x: 0, y: 0, width: Int((viewForImages.frame.width) / 2) - 1, height: Int((viewForImages.frame.height))))
imageView1.image = UIImage(data: imageData1!)
viewForImages.addSubview(imageView1)
imageView2 = UIImageView(frame: CGRect(x: Int(imageView1.frame.width) + 1, y: 0, width: Int((viewForImages.frame.width) / 2), height: Int(viewForImages.frame.height)))
imageView2.image = UIImage(data: imageData2!)
viewForImages.addSubview(imageView2)
case 3:
for view in self.viewForImages.subviews {
view.removeFromSuperview()
}
imageView1 = UIImageView(frame: CGRect(x: 0, y: 0, width: Int((viewForImages.frame.width) / 2) - 1, height: Int((viewForImages.frame.height))))
imageView1.image = UIImage(data: imageData1!)
viewForImages.addSubview(imageView1)
imageView2 = UIImageView(frame: CGRect(x: Int((viewForImages.frame.width) / 2) + 1, y: 0, width: Int((viewForImages.frame.width) / 2), height: Int((viewForImages.frame.height) / 2) - 1))
imageView2.image = UIImage(data: imageData2!)
viewForImages.addSubview(imageView2)
imageView3 = UIImageView(frame: CGRect(x: Int((viewForImages.frame.width) / 2) + 1, y: Int(imageView2.frame.height) + 1, width: Int((viewForImages.frame.width) / 2), height: Int((viewForImages.frame.height)) / 2))
imageView3.image = UIImage(data: imageData3!)
viewForImages.addSubview(imageView3)
default:
break
}
}
上面的代码正确显示了图像视图,但我也将这些图像保存在核心数据中,当我再次打开此视图时,然后在 viewDidLoad() 中,我添加了以下代码:
override func viewDidLoad() {
super.viewDidLoad()
self.imageView1 = UIImageView(frame: CGRect(x: 0, y: 0, width: Int((viewForImages.frame.width) / 2) - 1, height: Int((viewForImages.frame.height))))
if let data = entry.imageData1 {
self.imageView1.image = UIImage(data: data)
}
viewForImages.addSubview(imageView1)
self.imageView2 = UIImageView(frame: CGRect(x: Int((viewForImages.frame.width) / 2) + 1, y: 0, width: Int((viewForImages.frame.width) / 2), height: Int((viewForImages.frame.height) / 2) - 1))
if let data = entry.imageData2 {
self.imageView2.image = UIImage(data: data)
}
viewForImages.addSubview(imageView2)
self.imageView3 = UIImageView(frame: CGRect(x: Int((viewForImages.frame.width) / 2) + 1, y: Int(imageView2.frame.height) + 1, width: Int((viewForImages.frame.width) / 2), height: Int((viewForImages.frame.height)) / 2))
if let data = entry.imageData3 {
self.imageView3.image = UIImage(data: data)
}
viewForImages.addSubview(imageView3)
}
因此,每当 VC 加载时,图像如下所示:
注意:viewForImages 是我使用 Storyboard 创建的视图,entry 是一个具有 3 个属性的实体:二进制数据 (NSData) 类型的图像 Data1、2、3。 现在当这个视图出现时,如果视图已经有图像,它会运行上面的代码,但是首先 imageView1 覆盖了大约 80% 的视图,而其他 2 个图像视图很少出现。为什么会这样?
尝试改变内容模式
imageView.contentMode = .ScaleAspectFill
好的,我明白了。
在 viewDiDLoad()
方法中,在 switch
语句之前,我添加了以下行,现在可以使用了。
self.viewForImages.layoutIfNeeded()