GithubHelp home page GithubHelp logo

Comments (4)

margox avatar margox commented on May 31, 2024 1

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.

zenangst avatar zenangst commented on May 31, 2024

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.

margox avatar margox commented on May 31, 2024

wechatimg13

from lightbox.

fukemy avatar fukemy commented on May 31, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.