Comments (4)
I found a solution, hoping to help you:
public class EnhancedLightboxController: LightboxController {
var downloadButton: UIButton?
var isDownloading = false {
didSet {
if (isDownloading) {
self.downloadButton?.addSubview(self.downloadSpinner)
} else {
self.downloadSpinner.removeFromSuperview()
}
self.downloadButton!.isEnabled = !isDownloading
}
}
lazy var tempImageView: UIImageView = {
return UIImageView(frame:CGRect(x: 0, y: 0, width: 20, height: 20))
}()
// the download indicator, unnecessary
lazy var downloadSpinner: UIView = {
let loading = UIActivityIndicatorView(activityIndicatorStyle: .white)
loading.frame = CGRect(x: 0, y: 0, width: 60, height: 60)
loading.startAnimating()
return loading
}()
public override init(images: [LightboxImage], startIndex: Int = 0) {
super.init(images: images, startIndex: startIndex)
self.downloadButton = UIButton()
// ... style and position the download button
self.downloadButton!.addTarget(self, action: #selector(self.saveImageToLocal), for: .touchUpInside)
self.footerView.addSubview(self.downloadButton!)
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@objc
private func saveImageToLocal () {
self.isDownloading = true
if let imageURL = self.images[self.currentPage].imageURL {
self.view.addSubview(self.tempImageView)
self.tempImageView.setImage(url: imageURL, placeholder: nil) { result in
switch result {
case .value(let image):
self.handleImageLoaded(image)
break
case .error:
break
}
}
}
}
private func handleImageLoaded (_ image: UIImage) {
self.tempImageView.removeFromSuperview()
UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.handleSaved), nil)
}
@objc
private func handleSaved (image: UIImage, error: NSError?, contextInfo: UnsafeRawPointer) {
self.isDownloading = false
if error == nil {
// photo saved
} else {
// unable to save photo
}
}
}
from lightbox.
Hey @almatri, we haven't really seen the need to add that feature just yet. We would gladly review a pull request that adds that feature 😎
from lightbox.
from lightbox.
update for margox:
public override init(images: [LightboxImage], startIndex: Int = 0) {
super.init(images: images, startIndex: startIndex)
self.downloadButton = RoundButton(frame: CGRect(0, 0, 36, 36))
self.downloadButton?.setImage(UIImage(named: "ic_download"), for: .normal)
self.downloadButton?.rounded = true
self.downloadButton?.backgroundColor = UIColor.white.withAlphaComponent(0.2)
// ... style and position the download button
self.downloadButton!.addTarget(self, action: #selector(self.saveImageToLocal), for: .touchUpInside)
self.footerView.addSubview(self.downloadButton!)
var frame = self.downloadButton!.frame
frame.origin.x = UIScreen.main.bounds.width / 2 - 18
frame.origin.y = 10
self.downloadButton?.frame = frame
}
@IBDesignable class RoundButton: UIButton
{
override func layoutSubviews() {
super.layoutSubviews()
updateCornerRadius()
}
@IBInspectable var rounded: Bool = true {
didSet {
updateCornerRadius()
}
}
@IBInspectable var bgAlpha: Float = 1 {
didSet {
updateBgAlpha()
}
}
func updateCornerRadius() {
layer.cornerRadius = rounded ? frame.size.height / 2 : 0
}
func updateBgAlpha(){
}
}
from lightbox.
Related Issues (20)
- Strat with specific index HOT 5
- Swipe Delegate HOT 1
- Close Programmaticly HOT 3
- Delete image HOT 3
- RTL SUPPORT HOT 1
- Images in fullscreen cover the close button, delete and page count
- Blank screen if media failed to load. HOT 1
- Animated GIF Support HOT 2
- Playing local videos not working.
- Feature Request: Please provide GIF support
- Installation with SPM fails HOT 1
- Delete Item Notification
- Multiple images and video in the array loop
- Presenting LightBoxController doesn't work. HOT 1
- replace imaginary with kingfisher library HOT 3
- this is cannot play youtube URL 😔 HOT 2
- LightBox won't resolve in SPM HOT 2
- Authentication Headers
- Download button HOT 7
- Development question HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from lightbox.