Skip to content

Commit

Permalink
Merge branch 'bohachevskyy-rtl_support'
Browse files Browse the repository at this point in the history
# Conflicts:
#	ImageSlideshow/Classes/Core/ImageSlideshowItem.swift
#	ImageSlideshow/Classes/InputSources/ParseSource.swift
  • Loading branch information
zvonicek committed Jan 19, 2020
2 parents 3bc7f28 + eafb157 commit e19fba5
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 13 deletions.
4 changes: 4 additions & 0 deletions ImageSlideshow/Classes/Core/ImageSlideshow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,10 @@ open class ImageSlideshow: UIView {
scrollView.showsHorizontalScrollIndicator = false
scrollView.showsVerticalScrollIndicator = false
scrollView.autoresizingMask = autoresizingMask
if UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft {
scrollView.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi))
}

if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
}
Expand Down
35 changes: 22 additions & 13 deletions ImageSlideshow/Classes/Core/ImageSlideshowItem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ open class ImageSlideshowItem: UIScrollView, UIScrollViewDelegate {
}
}

/// Wraps around ImageView so RTL transformation on it doesn't interfere with UIScrollView zooming
private let imageViewWrapper = UIView()

// MARK: - Life cycle

/**
Expand All @@ -58,16 +61,22 @@ open class ImageSlideshowItem: UIScrollView, UIScrollViewDelegate {

super.init(frame: CGRect.null)

imageView.clipsToBounds = true
imageView.isUserInteractionEnabled = true
imageViewWrapper.addSubview(imageView)
imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

imageViewWrapper.clipsToBounds = true
imageViewWrapper.isUserInteractionEnabled = true
if UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft {
imageView.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi))
}

setPictoCenter()

// scroll view configuration
delegate = self
showsVerticalScrollIndicator = false
showsHorizontalScrollIndicator = false
addSubview(imageView)
addSubview(imageViewWrapper)
minimumZoomScale = 1.0
maximumZoomScale = calculateMaximumScale()

Expand All @@ -78,13 +87,13 @@ open class ImageSlideshowItem: UIScrollView, UIScrollViewDelegate {
// tap gesture recognizer
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(ImageSlideshowItem.tapZoom))
tapRecognizer.numberOfTapsRequired = 2
imageView.addGestureRecognizer(tapRecognizer)
imageViewWrapper.addGestureRecognizer(tapRecognizer)
gestureRecognizer = tapRecognizer

singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(retryLoadImage))
singleTapGestureRecognizer!.numberOfTapsRequired = 1
singleTapGestureRecognizer!.isEnabled = false
imageView.addGestureRecognizer(singleTapGestureRecognizer!)
imageViewWrapper.addGestureRecognizer(singleTapGestureRecognizer!)
}

required public init?(coder aDecoder: NSCoder) {
Expand All @@ -95,9 +104,9 @@ open class ImageSlideshowItem: UIScrollView, UIScrollViewDelegate {
super.layoutSubviews()

if !zoomEnabled {
imageView.frame.size = frame.size
imageViewWrapper.frame.size = frame.size
} else if !isZoomed() {
imageView.frame.size = calculatePictureSize()
imageViewWrapper.frame.size = calculatePictureSize()
}

if isFullScreen() {
Expand All @@ -106,7 +115,7 @@ open class ImageSlideshowItem: UIScrollView, UIScrollViewDelegate {
setPictoCenter()
}

self.activityIndicator?.view.center = imageView.center
self.activityIndicator?.view.center = imageViewWrapper.center

// if self.frame was changed and zoomInInitially enabled, zoom in
if lastFrame != frame && zoomInInitially {
Expand All @@ -115,7 +124,7 @@ open class ImageSlideshowItem: UIScrollView, UIScrollViewDelegate {

lastFrame = self.frame

contentSize = imageView.frame.size
contentSize = imageViewWrapper.frame.size
maximumZoomScale = calculateMaximumScale()
}

Expand Down Expand Up @@ -198,15 +207,15 @@ open class ImageSlideshowItem: UIScrollView, UIScrollViewDelegate {
}

fileprivate func setPictoCenter() {
var intendHorizon = (screenSize().width - imageView.frame.width ) / 2
var intendVertical = (screenSize().height - imageView.frame.height ) / 2
var intendHorizon = (screenSize().width - imageViewWrapper.frame.width ) / 2
var intendVertical = (screenSize().height - imageViewWrapper.frame.height ) / 2
intendHorizon = intendHorizon > 0 ? intendHorizon : 0
intendVertical = intendVertical > 0 ? intendVertical : 0
contentInset = UIEdgeInsets(top: intendVertical, left: intendHorizon, bottom: intendVertical, right: intendHorizon)
}

private func isFullScreen() -> Bool {
return imageView.frame.width >= screenSize().width && imageView.frame.height >= screenSize().height
return imageViewWrapper.frame.width >= screenSize().width && imageViewWrapper.frame.height >= screenSize().height
}

func clearContentInsets() {
Expand All @@ -220,7 +229,7 @@ open class ImageSlideshowItem: UIScrollView, UIScrollViewDelegate {
}

open func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return zoomEnabled ? imageView : nil
return zoomEnabled ? imageViewWrapper : nil
}

}

0 comments on commit e19fba5

Please sign in to comment.