Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

removing retain cycles #255

Merged
merged 2 commits into from
Jun 11, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions Example/ImageSlideshow.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@
8AA07A6EDAC622F1407E6C80 /* Pods_ImageSlideshow_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ImageSlideshow_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D007954E2043262C0053E25F /* TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = "<group>"; };
D0083DCD1EB739E700126B21 /* ActivityIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ActivityIndicator.swift; path = ../../ImageSlideshow/Classes/Core/ActivityIndicator.swift; sourceTree = "<group>"; };
D0B974AF202738F6006217CF /* PageIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PageIndicator.swift; path = ../../ImageSlideshow/Classes/Core/PageIndicator.swift; sourceTree = "<group>"; };
D00C7A2520B4C0A000E5725B /* ic_cross_white@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "ic_cross_white@3x.png"; path = "../../../ImageSlideshow/Assets/ic_cross_white@3x.png"; sourceTree = "<group>"; };
D00C7A2620B4C0A100E5725B /* ic_cross_white@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "ic_cross_white@2x.png"; path = "../../../ImageSlideshow/Assets/ic_cross_white@2x.png"; sourceTree = "<group>"; };
D0B974AF202738F6006217CF /* PageIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PageIndicator.swift; path = ../../ImageSlideshow/Classes/Core/PageIndicator.swift; sourceTree = "<group>"; };
D0E8A9E21D97EB6D007EC517 /* ImageSlideshow.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ImageSlideshow.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0E8A9E41D97EB6D007EC517 /* ImageSlideshow_framework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSlideshow_framework.h; sourceTree = "<group>"; };
D0E8A9E51D97EB6D007EC517 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
Expand Down Expand Up @@ -294,7 +294,7 @@
attributes = {
LastSwiftMigration = 0700;
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0900;
LastUpgradeCheck = 0940;
ORGANIZATIONNAME = CocoaPods;
TargetAttributes = {
607FACCF1AFB9204008FA782 = {
Expand Down Expand Up @@ -489,12 +489,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 @@ -543,12 +545,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
Loading