ReadViewSDK/Sources/RDEpubReaderView/EPUBUI/RDEPUBImageViewerCoordinator.swift
shenlei d7fcda345d refactor: rename RDReaderView -> RDEpubReaderView, update pod config and docs
- Rename source module from RDReaderView to RDEpubReaderView
- Move all source files from Sources/RDReaderView/ to Sources/RDEpubReaderView/
- Update podspec: RDReaderView.podspec -> RDEpubReaderView.podspec
- Update Podfile, demo project, and CocoaPods config for new pod name
- Delete old RDReaderView pod support files from ReadViewDemo/Pods
- Add new RDEpubReaderView pod support files
- Update documentation (API ref, architecture, UML, conventions, etc.)
- Add FixedLayoutRotationTests
- Update .gitignore: exclude .DS_Store, manual unpack backups, _ssoft-output
2026-07-10 19:44:53 +09:00

61 lines
2.0 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import UIKit
final class RDEPUBImageViewerCoordinator {
private weak var presentingController: UIViewController?
private let theme: RDEPUBReaderTheme
init(presentingController: UIViewController, theme: RDEPUBReaderTheme) {
self.presentingController = presentingController
self.theme = theme
}
// MARK: - From Native Text Path (UIImage already resolved)
func presentImage(_ image: UIImage, sourceRect: CGRect? = nil, altText: String? = nil) {
let config = RDEPUBImageViewController.Configuration(
image: image,
sourceRect: sourceRect,
altText: altText,
theme: theme
)
let viewerVC = RDEPUBImageViewController(configuration: config)
presentingController?.present(viewerVC, animated: true)
}
// MARK: - From WebView Path (need to resolve from src URL)
func presentImageFromWebView(
src: String,
baseHref: String?,
resourceResolver: RDEPUBResourceResolver
) {
guard let image = loadImage(src: src, baseHref: baseHref, resourceResolver: resourceResolver) else {
return
}
presentImage(image)
}
// MARK: - Private
private func loadImage(
src: String,
baseHref: String?,
resourceResolver: RDEPUBResourceResolver
) -> UIImage? {
let pathPart = src.components(separatedBy: "#").first ?? src
guard !pathPart.isEmpty else { return nil }
let fileURL: URL?
if let baseHref {
fileURL = resourceResolver.fileURL(forReference: pathPart, relativeToHref: baseHref)
} else {
let normalized = resourceResolver.normalizedHref(pathPart)
fileURL = normalized.flatMap { resourceResolver.fileURL(forRelativePath: $0) }
}
// provider
guard let fileURL, let data = resourceResolver.resourceData(at: fileURL) else { return nil }
return UIImage(data: data)
}
}