ios – Is there a technique to repair the delay earlier than the picture seems?

0
16
ios – Is there a technique to repair the delay earlier than the picture seems?


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)")
    }
    
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here