Увеличение использования памяти в iOS с помощью UISlider для обновления изображения UIImageView. ⇐ IOS
Увеличение использования памяти в iOS с помощью UISlider для обновления изображения UIImageView.
Я новичок в разработке Swift и iOS и столкнулся с проблемой при создании приложения. В ViewController у меня есть ScrollView с вложенным внутри UIView с двумя дочерними элементами UIImageView, расположенными один поверх другого. Я использую фоновое изображение для отображения изображения в формате jpg, содержащего фэнтезийную карту, в то время как верхнее изображение предназначено для отображения изображения в формате png (с прозрачным фоном) с нарисованными в нем путями, которые представляют путешествие некоторых персонажей. Внутри ViewController находится вертикальный StackView с меткой и UISlider. С помощью этого ползунка пользователь может выбрать дату, и верхнее изображение должно быть обновлено правильным изображением, представляющим путь символов до указанной даты.
Ниже приведен класс ViewController
`импортировать UIKit класс MapViewController: UIViewController { @IBOutlet слабая переменная прокрутки: UIScrollView! @IBOutlet слабая переменная imagesView: UIView! @IBOutlet слабая переменная backgroundImageView: UIImageView! @IBOutlet слабая переменная переднего планаImageView: UIImageView! @IBOutlet слабая переменная MenuStackView: UIStackView! @IBOutlet слабая переменная colorSwitch: UISwitch! @IBOutlet слабая переменная dateLabel: UILabel! @IBOutlet слабая переменная dateSlider: UISlider! пусть mapPins = MapPins() переопределить функцию viewDidLoad() { супер.viewDidLoad() MenuStackView.layer.cornerRadius = 11,0 MenuStackView.layer.masksToBounds = true dateSlider.maximumValue = Float(mapPins.pinsLabelTexts.count) ScrollView.delegate = сам updateBackgroundMap (isColored: true) } func updateBackgroundMap (isColored: Bool) { вар backImage: UIImage? = ноль если isColored { backImage = UIImage(с именем: "Mappa Antico Mondo - colori.jpg") } еще { backImage = UIImage(с именем: "Mappa Antico Mondo - bn.jpg") } backgroundImageView.image = backImage backgroundImageView.contentMode = .scaleAspectFit backgroundImageView.frame.size = backImage!.size } func updateTopImage(imageName: String?) { если имя_изображения == ноль { передний планImageView.image = ноль } еще { пусть изображение = UIImage (по имени: imageName!) передний планImageView.image = изображение } } функция updateCharactersPins() { индекс вар = Int(dateSlider.value) если индекс > mapPins.pinsLabelTexts.count-1 { index = mapPins.pinsLabelTexts.count-1 } dateLabel.text = mapPins.pinsLabelTexts[index-1] updateTopImage(imageName: mapPins.getPinsImageName(для: index-1)) } @IBAction func toggleColors(_ sender: UISwitch) { updateBackgroundMap (isColored: sender.isOn) } @IBAction func dateSliderChanged (_ отправитель: UISlider) { updateCharactersPins() } } расширение MapViewController: UIScrollViewDelegate { func viewForZooming (в ScrollView: UIScrollView) -> UIView? { вернуть изображенияПросмотреть } }` Существует 104 возможных «mapPin» (изображения png для верхнего изображения), и когда я тестирую код, все работает «отлично», но в отладчике я вижу, что использование памяти увеличивается каждый раз, когда я меняю ползунок и в конце концов приложение вылетело, потому что оно использует слишком много памяти. То же самое не произойдет, если я использую приложение в симуляторе Xcode. Более того, я попытался удалить ползунок и вызвать функцию updateCharactersPins() 104 раза в методе viewDidLoad(), чтобы воссоздать вызовы функции столько раз, сколько делает ползунок (если пользователь просто увеличивает его), и обнаружил, что использование памяти остается в порядке. Похоже, что существует проблема (вероятно, в моем коде) с @IBAction моего слайдера, обрабатывающего вызовы функций. Может ли быть так, что каждый объект UIImage остается в памяти?
Я новичок в разработке Swift и iOS и столкнулся с проблемой при создании приложения. В ViewController у меня есть ScrollView с вложенным внутри UIView с двумя дочерними элементами UIImageView, расположенными один поверх другого. Я использую фоновое изображение для отображения изображения в формате jpg, содержащего фэнтезийную карту, в то время как верхнее изображение предназначено для отображения изображения в формате png (с прозрачным фоном) с нарисованными в нем путями, которые представляют путешествие некоторых персонажей. Внутри ViewController находится вертикальный StackView с меткой и UISlider. С помощью этого ползунка пользователь может выбрать дату, и верхнее изображение должно быть обновлено правильным изображением, представляющим путь символов до указанной даты.
Ниже приведен класс ViewController
`импортировать UIKit класс MapViewController: UIViewController { @IBOutlet слабая переменная прокрутки: UIScrollView! @IBOutlet слабая переменная imagesView: UIView! @IBOutlet слабая переменная backgroundImageView: UIImageView! @IBOutlet слабая переменная переднего планаImageView: UIImageView! @IBOutlet слабая переменная MenuStackView: UIStackView! @IBOutlet слабая переменная colorSwitch: UISwitch! @IBOutlet слабая переменная dateLabel: UILabel! @IBOutlet слабая переменная dateSlider: UISlider! пусть mapPins = MapPins() переопределить функцию viewDidLoad() { супер.viewDidLoad() MenuStackView.layer.cornerRadius = 11,0 MenuStackView.layer.masksToBounds = true dateSlider.maximumValue = Float(mapPins.pinsLabelTexts.count) ScrollView.delegate = сам updateBackgroundMap (isColored: true) } func updateBackgroundMap (isColored: Bool) { вар backImage: UIImage? = ноль если isColored { backImage = UIImage(с именем: "Mappa Antico Mondo - colori.jpg") } еще { backImage = UIImage(с именем: "Mappa Antico Mondo - bn.jpg") } backgroundImageView.image = backImage backgroundImageView.contentMode = .scaleAspectFit backgroundImageView.frame.size = backImage!.size } func updateTopImage(imageName: String?) { если имя_изображения == ноль { передний планImageView.image = ноль } еще { пусть изображение = UIImage (по имени: imageName!) передний планImageView.image = изображение } } функция updateCharactersPins() { индекс вар = Int(dateSlider.value) если индекс > mapPins.pinsLabelTexts.count-1 { index = mapPins.pinsLabelTexts.count-1 } dateLabel.text = mapPins.pinsLabelTexts[index-1] updateTopImage(imageName: mapPins.getPinsImageName(для: index-1)) } @IBAction func toggleColors(_ sender: UISwitch) { updateBackgroundMap (isColored: sender.isOn) } @IBAction func dateSliderChanged (_ отправитель: UISlider) { updateCharactersPins() } } расширение MapViewController: UIScrollViewDelegate { func viewForZooming (в ScrollView: UIScrollView) -> UIView? { вернуть изображенияПросмотреть } }` Существует 104 возможных «mapPin» (изображения png для верхнего изображения), и когда я тестирую код, все работает «отлично», но в отладчике я вижу, что использование памяти увеличивается каждый раз, когда я меняю ползунок и в конце концов приложение вылетело, потому что оно использует слишком много памяти. То же самое не произойдет, если я использую приложение в симуляторе Xcode. Более того, я попытался удалить ползунок и вызвать функцию updateCharactersPins() 104 раза в методе viewDidLoad(), чтобы воссоздать вызовы функции столько раз, сколько делает ползунок (если пользователь просто увеличивает его), и обнаружил, что использование памяти остается в порядке. Похоже, что существует проблема (вероятно, в моем коде) с @IBAction моего слайдера, обрабатывающего вызовы функций. Может ли быть так, что каждый объект UIImage остается в памяти?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Увеличение использования памяти после обновления до Spring boot 3 [закрыто]
Anonymous » » в форуме JAVA - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-