I am utilizing this code to create easy reader. In my reader I’ve picture view to point out photographs and textual content label to point out textual content on display. All the pieces works advantageous, however after I launch the app and begin turning pages, I expertise a slight delay of some seconds earlier than the subsequent web page seems. But when I scroll ahead by means of all of the pages. Then I will scroll again all of the pages. And once more I’ll begin flipping by means of the pages ahead. Then this delay of some seconds will disappear. Is there a technique to repair this delay? Possibly I have to someway pre-load the photographs?
ReaderController
class ReaderController: UIViewController {
var pagesData = [PageData]()
var index = Int()
var pageIndex: Int = -1
let pageContainer: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
let pageViews: [PageLayout] = {
let view = [PageLayout(), PageLayout()]
view[0].translatesAutoresizingMaskIntoConstraints = false
view[1].translatesAutoresizingMaskIntoConstraints = false
return view
}()
override func viewDidLoad() {
tremendous.viewDidLoad()
setupViews()
setupConstraints()
pageViews[0].index = index
pageViews[1].index = index
pageViews[0].pageIndex = pageIndex
pageViews[1].pageIndex = pageIndex
pageTransition(animated: false, route: "fromRight")
}
func setupViews() {
pageContainer.addSubview(pageViews[0])
pageContainer.addSubview(pageViews[1])
view.addSubview(pageContainer)
}
func setupConstraints() {
pageContainer.topAnchor.constraint(equalTo: view.topAnchor, fixed: 0.0).isActive = true
pageContainer.bottomAnchor.constraint(equalTo: view.bottomAnchor, fixed: 0.0).isActive = true
pageContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor, fixed: 0.0).isActive = true
pageContainer.trailingAnchor.constraint(equalTo: view.trailingAnchor, fixed: 0.0).isActive = true
pageViews[0].topAnchor.constraint(equalTo: pageContainer.topAnchor).isActive = true
pageViews[0].bottomAnchor.constraint(equalTo: pageContainer.bottomAnchor).isActive = true
pageViews[0].leadingAnchor.constraint(equalTo: pageContainer.leadingAnchor).isActive = true
pageViews[0].trailingAnchor.constraint(equalTo: pageContainer.trailingAnchor).isActive = true
pageViews[1].topAnchor.constraint(equalTo: pageContainer.topAnchor).isActive = true
pageViews[1].bottomAnchor.constraint(equalTo: pageContainer.bottomAnchor).isActive = true
pageViews[1].leadingAnchor.constraint(equalTo: pageContainer.leadingAnchor).isActive = true
pageViews[1].trailingAnchor.constraint(equalTo: pageContainer.trailingAnchor).isActive = true
}
func loadData(fileName: Any) -> PagesData {
var url = NSURL()
url = Bundle.major.url(forResource: "textual content", withExtension: "json")! as NSURL
let knowledge = strive! Information(contentsOf: url as URL)
let individual = strive! JSONDecoder().decode(PagesData.self, from: knowledge)
return individual
}
override func touchesBegan(_ touches: Set, with occasion: UIEvent?) {
for contact in touches {
let location = contact.location(in: view.self)
if view.safeAreaInsets.left > 30 {
if (location.x > self.view.body.measurement.width - (view.safeAreaInsets.left * 1.5)) {
pageTransition(animated: true, route: "fromRight")
} else if (location.x < (view.safeAreaInsets.left * 1.5)) {
pageTransition(animated: true, route: "fromLeft")
}
}
else {
if (location.x > self.view.body.measurement.width - 40) {
pageTransition(animated: true, route: "fromRight")
} else if (location.x < 40) {
pageTransition(animated: true, route: "fromLeft")
}
}
}
}
func pageTransition(animated: Bool, route: String) {
let consequence = loadData(fileName: pagesData)
swap route {
case "fromRight":
pageIndex += 1
case "fromLeft":
pageIndex -= 1
default: break
}
pageViews[0].pageIndex = pageIndex
pageViews[1].pageIndex = pageIndex
if pageIndex <= -1 {
pageIndex = 0
} else if pageIndex >= consequence.pagesData.depend {
pageIndex = consequence.pagesData.depend - 1
} else {
let fromView = pageViews[0].isHidden ? pageViews[1] : pageViews[0]
let toView = pageViews[0].isHidden ? pageViews[0] : pageViews[1]
toView.configure(theData: consequence.pagesData[pageIndex])
fromView.isHidden = true
toView.isHidden = false
}
}
}
PageLayout
class PageLayout: UIView {
var index = Int()
var pageIndex = Int()
personal let imageView: UIImageView = {
let picture = UIImageView()
picture.contentMode = .scaleAspectFill
picture.translatesAutoresizingMaskIntoConstraints = false
return picture
}()
var imageViewTopConstraint = NSLayoutConstraint()
var imageViewBottomConstraint = NSLayoutConstraint()
var imageViewLeadingConstraint = NSLayoutConstraint()
var imageViewTrailingConstraint = NSLayoutConstraint()
personal let textLabel: UILabel = {
let label = UILabel()
label.font = UIFont(identify: "ComicSansMS-Daring", measurement: 19)
label.textColor = .white
label.textAlignment = .middle
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.layer.shadowColor = UIColor.black.cgColor
label.layer.shadowOffset = CGSize.zero
label.layer.shadowOpacity = 1.0
label.layer.shadowRadius = 4
return label
}()
var textLabelTopConstraint = NSLayoutConstraint()
var textLabelBottomConstraint = NSLayoutConstraint()
var textLabelLeadingConstraint = NSLayoutConstraint()
var textLabelTrailingConstraint = NSLayoutConstraint()
override init(body: CGRect) {
tremendous.init(body: body)
addSubview(imageView)
addSubview(textLabel)
setupConstraints()
}
required init?(coder: NSCoder) {
fatalError("Not taking place")
}
func setupConstraints() {
imageViewTopConstraint = imageView.topAnchor.constraint(equalTo: topAnchor, fixed: 0.0)
imageViewBottomConstraint = imageView.bottomAnchor.constraint(equalTo: bottomAnchor, fixed: 0.0)
imageViewLeadingConstraint = imageView.leadingAnchor.constraint(equalTo: leadingAnchor, fixed: 0.0)
imageViewTrailingConstraint = imageView.trailingAnchor.constraint(equalTo: trailingAnchor, fixed: 0.0)
addConstraints([imageViewTopConstraint, imageViewBottomConstraint, imageViewLeadingConstraint, imageViewTrailingConstraint])
textLabelTopConstraint = imageView.topAnchor.constraint(equalTo: topAnchor, fixed: 0.0)
textLabelBottomConstraint = imageView.bottomAnchor.constraint(equalTo: bottomAnchor, fixed: 0.0)
textLabelLeadingConstraint = imageView.leadingAnchor.constraint(equalTo: leadingAnchor, fixed: 0.0)
textLabelTrailingConstraint = imageView.trailingAnchor.constraint(equalTo: trailingAnchor, fixed: 0.0)
addConstraints([textLabelTopConstraint, textLabelBottomConstraint, textLabelLeadingConstraint, textLabelTrailingConstraint])
}
func configure(theData: PageData) {
textLabel.textual content = theData.textData
imageView.picture = UIImage(named: "web page(pageIndex+1)")
}
}