Skip to content

Commit

Permalink
removing retain cycles (#255)
Browse files Browse the repository at this point in the history
* removing cycles

* fix relase optionality
  • Loading branch information
Yoloabdo authored and zvonicek committed Jun 11, 2018
1 parent dad6877 commit 359db34
Show file tree
Hide file tree
Showing 11 changed files with 64 additions and 60 deletions.
6 changes: 5 additions & 1 deletion Example/ImageSlideshow.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@
attributes = {
LastSwiftMigration = 0700;
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0900;
LastUpgradeCheck = 0940;
ORGANIZATIONNAME = CocoaPods;
TargetAttributes = {
607FACCF1AFB9204008FA782 = {
Expand Down Expand Up @@ -497,12 +497,14 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
Expand Down Expand Up @@ -551,12 +553,14 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0900"
LastUpgradeVersion = "0940"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down Expand Up @@ -40,7 +40,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
Expand Down Expand Up @@ -70,7 +69,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0900"
LastUpgradeVersion = "0940"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand All @@ -26,7 +26,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
Expand All @@ -37,7 +36,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
Expand Down
2 changes: 1 addition & 1 deletion Example/ImageSlideshow/TableViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,6 @@ class TableViewController: UITableViewController {
}
}

self.present(fullScreenController, animated: true, completion: nil)
present(fullScreenController, animated: true, completion: nil)
}
}
16 changes: 8 additions & 8 deletions Example/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,19 @@ PODS:
- Alamofire (4.5.1)
- AlamofireImage (3.3.0):
- Alamofire (~> 4.5)
- ImageSlideshow (1.5.3):
- ImageSlideshow/Core (= 1.5.3)
- ImageSlideshow/AFURL (1.5.3):
- ImageSlideshow (1.6):
- ImageSlideshow/Core (= 1.6)
- ImageSlideshow/AFURL (1.6):
- AFNetworking (~> 3.0)
- ImageSlideshow/Core
- ImageSlideshow/Alamofire (1.5.3):
- ImageSlideshow/Alamofire (1.6):
- AlamofireImage (~> 3.0)
- ImageSlideshow/Core
- ImageSlideshow/Core (1.5.3)
- ImageSlideshow/Kingfisher (1.5.3):
- ImageSlideshow/Core (1.6)
- ImageSlideshow/Kingfisher (1.6):
- ImageSlideshow/Core
- Kingfisher (> 3.0)
- ImageSlideshow/SDWebImage (1.5.3):
- ImageSlideshow/SDWebImage (1.6):
- ImageSlideshow/Core
- SDWebImage (< 5.0, >= 3.7)
- Kingfisher (4.0.1)
Expand Down Expand Up @@ -60,7 +60,7 @@ SPEC CHECKSUMS:
AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67
Alamofire: 2d95912bf4c34f164fdfc335872e8c312acaea4a
AlamofireImage: 2e784dc5d00f04903a52c1d169181469c805c3df
ImageSlideshow: 20d32ba26ab5b895e84d37e91ee2c18fc358a449
ImageSlideshow: f06168438862e8b2c901b2066f3abb5d20f7dd50
Kingfisher: b771785e9461ed4b8686d40e7145f9e58100cb24
SDWebImage: 098e97e6176540799c27e804c96653ee0833d13c

Expand Down
4 changes: 2 additions & 2 deletions ImageSlideshow/Classes/Core/ActivityIndicator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ extension UIActivityIndicatorView: ActivityIndicatorView {
}

public func show() {
self.startAnimating()
startAnimating()
}

public func hide() {
self.stopAnimating()
stopAnimating()
}
}

Expand Down
64 changes: 32 additions & 32 deletions ImageSlideshow/Classes/Core/ImageSlideshow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ open class ImageSlideshow: UIView {
/// Activity indicator shown when loading image
open var activityIndicator: ActivityIndicatorFactory? {
didSet {
self.reloadScrollView()
reloadScrollView()
}
}

Expand Down Expand Up @@ -130,38 +130,38 @@ open class ImageSlideshow: UIView {
/// Enables/disables infinite scrolling between images
open var circular = true {
didSet {
if self.images.count > 0 {
self.setImageInputs(self.images)
if images.count > 0 {
setImageInputs(images)
}
}
}

/// Enables/disables user interactions
open var draggingEnabled = true {
didSet {
self.scrollView.isUserInteractionEnabled = draggingEnabled
scrollView.isUserInteractionEnabled = draggingEnabled
}
}

/// Enables/disables zoom
open var zoomEnabled = false {
didSet {
self.reloadScrollView()
reloadScrollView()
}
}

/// Maximum zoom scale
open var maximumScale: CGFloat = 2.0 {
didSet {
self.reloadScrollView()
reloadScrollView()
}
}

/// Image change interval, zero stops the auto-scrolling
open var slideshowInterval = 0.0 {
didSet {
self.slideshowTimer?.invalidate()
self.slideshowTimer = nil
slideshowTimer?.invalidate()
slideshowTimer = nil
setTimerIfNeeded()
}
}
Expand Down Expand Up @@ -215,7 +215,7 @@ open class ImageSlideshow: UIView {
scrollView.bounces = true
scrollView.showsHorizontalScrollIndicator = false
scrollView.showsVerticalScrollIndicator = false
scrollView.autoresizingMask = self.autoresizingMask
scrollView.autoresizingMask = autoresizingMask
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
}
Expand All @@ -235,7 +235,7 @@ open class ImageSlideshow: UIView {

open override func removeFromSuperview() {
super.removeFromSuperview()
self.pauseTimer()
pauseTimer()
}

open override func layoutSubviews() {
Expand All @@ -250,15 +250,15 @@ open class ImageSlideshow: UIView {

open func layoutPageControl() {
if let pageIndicatorView = pageIndicator?.view {
pageIndicatorView.isHidden = self.images.count < 2
pageIndicatorView.isHidden = images.count < 2

var edgeInsets: UIEdgeInsets = UIEdgeInsets.zero
if #available(iOS 11.0, *) {
edgeInsets = self.safeAreaInsets
edgeInsets = safeAreaInsets
}

pageIndicatorView.sizeToFit()
pageIndicatorView.frame = pageIndicatorPosition.indicatorFrame(for: self.frame, indicatorSize: pageIndicatorView.frame.size, edgeInsets: edgeInsets)
pageIndicatorView.frame = pageIndicatorPosition.indicatorFrame(for: frame, indicatorSize: pageIndicatorView.frame.size, edgeInsets: edgeInsets)
}
}

Expand All @@ -270,7 +270,7 @@ open class ImageSlideshow: UIView {
scrollView.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height - scrollViewBottomPadding)
scrollView.contentSize = CGSize(width: scrollView.frame.size.width * CGFloat(scrollViewImages.count), height: scrollView.frame.size.height)

for (index, view) in self.slideshowItems.enumerated() {
for (index, view) in slideshowItems.enumerated() {
if !view.zoomInInitially {
view.zoomOut()
}
Expand All @@ -283,15 +283,15 @@ open class ImageSlideshow: UIView {
/// reloads scroll view with latest slideshow items
func reloadScrollView() {
// remove previous slideshow items
for view in self.slideshowItems {
for view in slideshowItems {
view.removeFromSuperview()
}
self.slideshowItems = []
slideshowItems = []

var i = 0
for image in scrollViewImages {
let item = ImageSlideshowItem(image: image, zoomEnabled: self.zoomEnabled, activityIndicator: self.activityIndicator?.create(), maximumScale: maximumScale)
item.imageView.contentMode = self.contentScaleMode
let item = ImageSlideshowItem(image: image, zoomEnabled: zoomEnabled, activityIndicator: activityIndicator?.create(), maximumScale: maximumScale)
item.imageView.contentMode = contentScaleMode
slideshowItems.append(item)
scrollView.addSubview(item)
i += 1
Expand All @@ -312,7 +312,7 @@ open class ImageSlideshow: UIView {

for i in 0..<totalCount {
let item = slideshowItems[i]
switch self.preload {
switch preload {
case .all:
item.loadImage()
case .fixed(let offset):
Expand All @@ -333,8 +333,8 @@ open class ImageSlideshow: UIView {
- parameter inputs: Array of InputSource instances.
*/
open func setImageInputs(_ inputs: [InputSource]) {
self.images = inputs
self.pageIndicator?.numberOfPages = inputs.count
images = inputs
pageIndicator?.numberOfPages = inputs.count

// in circular mode we add dummy first and last image to enable smooth scrolling
if circular && images.count > 1 {
Expand All @@ -348,9 +348,9 @@ open class ImageSlideshow: UIView {
scImages.append(first)
}

self.scrollViewImages = scImages
scrollViewImages = scImages
} else {
self.scrollViewImages = images
scrollViewImages = images
}

reloadScrollView()
Expand All @@ -372,7 +372,7 @@ open class ImageSlideshow: UIView {
pageOffset += 1
}

self.setScrollViewPage(pageOffset, animated: animated)
setScrollViewPage(pageOffset, animated: animated)
}

/**
Expand All @@ -382,8 +382,8 @@ open class ImageSlideshow: UIView {
*/
open func setScrollViewPage(_ newScrollViewPage: Int, animated: Bool) {
if scrollViewPage < scrollViewImages.count {
self.scrollView.scrollRectToVisible(CGRect(x: scrollView.frame.size.width * CGFloat(newScrollViewPage), y: 0, width: scrollView.frame.size.width, height: scrollView.frame.size.height), animated: animated)
self.setCurrentPageForScrollViewPage(newScrollViewPage)
scrollView.scrollRectToVisible(CGRect(x: scrollView.frame.size.width * CGFloat(newScrollViewPage), y: 0, width: scrollView.frame.size.width, height: scrollView.frame.size.height), animated: animated)
setCurrentPageForScrollViewPage(newScrollViewPage)
}
}

Expand All @@ -401,7 +401,7 @@ open class ImageSlideshow: UIView {
nextPage = 0
}

self.setScrollViewPage(nextPage, animated: true)
setScrollViewPage(nextPage, animated: true)
}

fileprivate func setCurrentPageForScrollViewPage(_ page: Int) {
Expand Down Expand Up @@ -448,12 +448,12 @@ open class ImageSlideshow: UIView {

@available(*, deprecated, message: "use pauseTimer instead")
open func pauseTimerIfNeeded() {
self.pauseTimer()
pauseTimer()
}

@available(*, deprecated, message: "use unpauseTimer instead")
open func unpauseTimerIfNeeded() {
self.unpauseTimer()
unpauseTimer()
}

/**
Expand All @@ -468,8 +468,8 @@ open class ImageSlideshow: UIView {
self?.setCurrentPage(page, animated: false)
}

fullscreen.initialPage = self.currentPage
fullscreen.inputs = self.images
fullscreen.initialPage = currentPage
fullscreen.inputs = images
slideshowTransitioningDelegate = ZoomAnimatedTransitioningDelegate(slideshowView: self, slideshowController: fullscreen)
fullscreen.transitioningDelegate = slideshowTransitioningDelegate
controller.present(fullscreen, animated: true, completion: nil)
Expand All @@ -479,7 +479,7 @@ open class ImageSlideshow: UIView {

@objc private func pageControlValueChanged() {
if let currentPage = pageIndicator?.page {
self.setCurrentPage(currentPage, animated: true)
setCurrentPage(currentPage, animated: true)
}
}
}
Expand Down
14 changes: 9 additions & 5 deletions ImageSlideshow/Classes/Core/ImageSlideshowItem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -125,12 +125,16 @@ open class ImageSlideshowItem: UIScrollView, UIScrollViewDelegate {
isLoading = true
imageReleased = false
activityIndicator?.show()
image.load(to: self.imageView) { image in
image.load(to: self.imageView) {[weak self] image in
// set image to nil if there was a release request during the image load
self.imageView.image = self.imageReleased ? nil : image
self.activityIndicator?.hide()
self.loadFailed = image == nil
self.isLoading = false
if let imageRelease = self?.imageReleased, imageRelease {
self?.imageView.image = nil
}else{
self?.imageView.image = image
}
self?.activityIndicator?.hide()
self?.loadFailed = image == nil
self?.isLoading = false
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion ImageSlideshow/Classes/Core/PageIndicator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,6 @@ public class LabelPageIndicator: UILabel, PageIndicatorView {

public override func sizeToFit() {
let maximumString = String(repeating: "8", count: numberOfPages) as NSString
self.frame.size = maximumString.size(withAttributes: [.font: self.font])
self.frame.size = maximumString.size(withAttributes: [.font: font])
}
}
Loading

0 comments on commit 359db34

Please sign in to comment.