使用 Switch 语句从 Xcassets 加载 imageView
Load imageView from Xcassets using Switch statement
我在 Xcassets 中有 @1 @2 和 @3 的图像,我正在尝试使用下面的代码将图像加载到滚动视图页面上,该代码会根据打开的年龄切换图像。页面由位置决定,在 viewWillLoad 函数中调用 switch 语句。图片没有加载,但声音正常,所以我知道问题出在图片加载上。你能帮忙吗?
override func viewDidDisappear(animated: Bool) {
self.imageView.removeFromSuperview()
self.imageView.image = nil
}
override func viewWillAppear(animated: Bool) {
showImageView()
let tapGestureImage = UITapGestureRecognizer(target: self, action: Selector("handleTapGestureImage:"))
imageView.addGestureRecognizer(tapGestureImage)
imageView.userInteractionEnabled = true
}
// MARK: BWWalkthroughPage Implementation
func walkthroughDidScroll(position: CGFloat, offset: CGFloat) {
// getting the page number from the scroll position. First page loads as nil so want it to be zero.
screenPage = Int(((position / view.bounds.size.width) + 1) - 1)
}
func showImageView() {
// change imageView in bundle depending on which scrollview page you are.
switch screenPage {
case 0:
self.imageView.image = UIImage(named: "Aligator", inBundle: NSBundle.mainBundle(), compatibleWithTraitCollection: self.traitCollection)
self.view.addSubview(imageView)
case 1:
self.imageView.image = UIImage(named: "Bear", inBundle: NSBundle.mainBundle(), compatibleWithTraitCollection: self.traitCollection)
self.view.addSubview(imageView)
default:
self.imageView.image = nil
}
}
您需要了解一些重要事项。
您不需要一遍又一遍地 add/remove 视图层次结构中的图像视图。只需调用 imageView.image = nil
就足够了。
第二件事是你不需要使用完整的方法UIImage(named:inBundle:compatibleWithTraitCollection:)
。您应该能够简单地使用 UIImage(named:)
。如果您发现自己不得不使用前者,那么在您职业生涯的这个阶段,您可能会承受更大的负担。
第三点就是当你覆盖一个方法的时候,99%的情况下你必须调用super
这是一个应该有效的示例:
import UIKit
class MyViewController: UIViewController {
override fun viewDidLoad() {
super.viewDidLoad()
let gestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("handleTapGestureImage:"))
imageView.addGestureRecognizer(gestureRecognizer)
imageView.userInteractionEnabled = true
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated: animated)
self.imageView.image = nil
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated: animated)
showImageView()
}
func walkthroughDidScroll(position: CGFloat, offset: CGFloat) {
screenPage = Int(((position / view.bounds.size.width) + 1) - 1)
}
func showImageView() {
switch screenPage {
case 0:
imageView.image = UIImage(named: "Aligator")
case 1:
imageView.image = UIImage(named: "Bear")
default:
imageView.image = nil
}
}
}
我在 Xcassets 中有 @1 @2 和 @3 的图像,我正在尝试使用下面的代码将图像加载到滚动视图页面上,该代码会根据打开的年龄切换图像。页面由位置决定,在 viewWillLoad 函数中调用 switch 语句。图片没有加载,但声音正常,所以我知道问题出在图片加载上。你能帮忙吗?
override func viewDidDisappear(animated: Bool) {
self.imageView.removeFromSuperview()
self.imageView.image = nil
}
override func viewWillAppear(animated: Bool) {
showImageView()
let tapGestureImage = UITapGestureRecognizer(target: self, action: Selector("handleTapGestureImage:"))
imageView.addGestureRecognizer(tapGestureImage)
imageView.userInteractionEnabled = true
}
// MARK: BWWalkthroughPage Implementation
func walkthroughDidScroll(position: CGFloat, offset: CGFloat) {
// getting the page number from the scroll position. First page loads as nil so want it to be zero.
screenPage = Int(((position / view.bounds.size.width) + 1) - 1)
}
func showImageView() {
// change imageView in bundle depending on which scrollview page you are.
switch screenPage {
case 0:
self.imageView.image = UIImage(named: "Aligator", inBundle: NSBundle.mainBundle(), compatibleWithTraitCollection: self.traitCollection)
self.view.addSubview(imageView)
case 1:
self.imageView.image = UIImage(named: "Bear", inBundle: NSBundle.mainBundle(), compatibleWithTraitCollection: self.traitCollection)
self.view.addSubview(imageView)
default:
self.imageView.image = nil
}
}
您需要了解一些重要事项。
您不需要一遍又一遍地 add/remove 视图层次结构中的图像视图。只需调用 imageView.image = nil
就足够了。
第二件事是你不需要使用完整的方法UIImage(named:inBundle:compatibleWithTraitCollection:)
。您应该能够简单地使用 UIImage(named:)
。如果您发现自己不得不使用前者,那么在您职业生涯的这个阶段,您可能会承受更大的负担。
第三点就是当你覆盖一个方法的时候,99%的情况下你必须调用super
这是一个应该有效的示例:
import UIKit
class MyViewController: UIViewController {
override fun viewDidLoad() {
super.viewDidLoad()
let gestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("handleTapGestureImage:"))
imageView.addGestureRecognizer(gestureRecognizer)
imageView.userInteractionEnabled = true
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated: animated)
self.imageView.image = nil
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated: animated)
showImageView()
}
func walkthroughDidScroll(position: CGFloat, offset: CGFloat) {
screenPage = Int(((position / view.bounds.size.width) + 1) - 1)
}
func showImageView() {
switch screenPage {
case 0:
imageView.image = UIImage(named: "Aligator")
case 1:
imageView.image = UIImage(named: "Bear")
default:
imageView.image = nil
}
}
}