gpt4 book ai didi

ios - 滚动事件后标签文本未更新

转载 作者:行者123 更新时间:2023-11-30 11:50:04 25 4
gpt4 key购买 nike

我正在尝试在滚动事件后更新标签的文本。我有一个打印命令,可以打印正确的值,但标签没有更新。这是我的代码

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let x = scrollView.contentOffset.x
let w = scrollView.bounds.size.width
let p = Int(x/w)
print("page \(p)") // this prints correct value
self.signalLabel.text = signalText[Int(x/w)] // this does not update
}

这是怎么回事?

这是完整的 View Controller 代码。通过单击初始 View Controller 上的按钮来调用该 View 。该 View 包含 UIScrollView 和 UIPageControl。 UIScrollView 包含两个可以前后滚动的图像。我想根据显示的图像更新标签文本。

import UIKit

class SignalOneViewController: UIViewController, UIScrollViewDelegate {

// MARK: Properties
@IBOutlet weak var signalScrollView: UIScrollView!
@IBOutlet weak var signalPageControl: UIPageControl!
@IBOutlet weak var signalLabel: UILabel!

// MARK: - Button Actions
@IBAction func signalOneButton(_ sender: Any) {
print("signal one button clicked")
performSegue(withIdentifier: "SignalOneSegue", sender: self)
}
@IBAction func onCancelButton(_ sender: Any) {
dismiss(animated: true, completion: nil)
}


let signalImages = ["signal1a.png", "signal1b.png"]
let signalText = ["Ready for play", "Untimed down"]

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
}

override func viewDidLayoutSubviews() {
self.loadScrollView()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func loadScrollView() {
let pageCount : CGFloat = CGFloat(signalImages.count)
signalLabel.text = signalText[0]

signalScrollView.backgroundColor = UIColor.clear
signalScrollView.delegate = self
signalScrollView.isPagingEnabled = true
signalScrollView.contentSize = CGSize(width: signalScrollView.frame.size.width * pageCount, height: signalScrollView.frame.size.height)
signalScrollView.showsHorizontalScrollIndicator = false
signalScrollView.showsVerticalScrollIndicator = false

signalPageControl.numberOfPages = Int(pageCount)
signalPageControl.pageIndicatorTintColor = UIColor.lightGray
signalPageControl.currentPageIndicatorTintColor = UIColor.blue
signalPageControl.addTarget(self, action: #selector(self.pageChanged), for: .valueChanged)

for i in 0..<Int(pageCount) {
print(self.signalScrollView.frame.size.width)
let image = UIImageView(frame: CGRect(x: self.signalScrollView.frame.size.width * CGFloat(i), y: 0, width: self.signalScrollView.frame.size.width, height: self.signalScrollView.frame.size.height))
image.image = UIImage(named: signalImages[i])!
image.contentMode = UIViewContentMode.scaleAspectFit
self.signalScrollView.addSubview(image)
}
}

//MARK: UIScrollView Delegate
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let viewWidth: CGFloat = scrollView.frame.size.width
// content offset - tells by how much the scroll view has scrolled.
let pageNumber = floor((scrollView.contentOffset.x - viewWidth / 50) / viewWidth) + 1
signalPageControl.currentPage = Int(pageNumber)
}

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let x = scrollView.contentOffset.x
let w = scrollView.bounds.size.width
let p = Int(x/w)
print("page \(p)")
self.signalLabel.text = signalText[p]
print(">>> \(signalText[Int(x/w)])")
}

//MARK: page tag action
@objc func pageChanged() {
let pageNumber = signalPageControl.currentPage
var frame = signalScrollView.frame
frame.origin.x = frame.size.width * CGFloat(pageNumber)
frame.origin.y = 0
signalScrollView.scrollRectToVisible(frame, animated: true)
}

}

最佳答案

确保 signalLabe IBOutlet 已附加到 Storyboard或 xib 中的标签

关于ios - 滚动事件后标签文本未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48425337/

25 4 0