【问题标题】:Display text as book pages in swift [closed]快速将文本显示为书页[关闭]
【发布时间】:2020-12-12 14:15:38
【问题描述】:

我正在尝试快速制作一个 epub 阅读器应用程序。我解析一个 epub 文件并获取所有元数据和 xhtml。然后,如果用户想阅读这本书,我将所有书籍的文本附加到 uitextview。是否有任何可能的解决方案可以像 iOS 中的原生 Books 应用一样在书页(不是滚动视图)中显示文本?

【问题讨论】:

    标签: ios swift uitextview epub


    【解决方案1】:

    请在您的帖子中添加minimal, reproducible example。也就是说,以下是 Apple 用于翻页的图书格式示例。

    class ViewController: UIViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
        let viewControllers: [UIViewController] = {
            var viewControllers = [ContentViewController]()
            for index in 1...10 {
                let textView = UITextView()
                textView.text = "Page \(index)"
                let contentVC = ContentViewController(textView: textView)
                viewControllers.append(contentVC)
            }
            return viewControllers
        }()
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let pageVC = UIPageViewController(transitionStyle: .pageCurl, navigationOrientation: .horizontal, options: nil)
            pageVC.dataSource = self
            pageVC.delegate = self
            pageVC.setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil)
    
            addChild(pageVC)
            self.view.addSubview(pageVC.view)
            pageVC.view.frame = self.view.bounds
            pageVC.didMove(toParent: self)
        }
    
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            guard var index = viewControllers.firstIndex(of: viewController), index > 0 else { return nil }
            index -= 1
            return viewControllers[index]
        }
    
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            guard var index = viewControllers.firstIndex(of: viewController), index < viewControllers.count else { return nil }
            index += 1
            return viewControllers[index]
        }
    }
    
    class ContentViewController: UIViewController {
        var textView = UITextView()
        init(textView: UITextView) {
            self.textView = textView
            super.init(nibName: nil, bundle: nil)
        }
        
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        override func viewDidLoad() {
            self.view.addSubview(textView)
            self.textView.bounds = self.view.frame
        }
    }
    

    至于解析 ePub,您必须解压缩并解析 XML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多