Skip to content

Instantly share code, notes, and snippets.

View victorBaro's full-sized avatar
👾

Victor Baro victorBaro

👾
View GitHub Profile
@victorBaro
victorBaro / FolderSizeCalculator.swift
Last active July 3, 2022 14:00
Calculate total size of a given directory URL. Ready to paste in a Playground. Code uses modern swift concurrency async/await. Part of the code based on the following SO post: https://stackoverflow.com/a/32814710
import UIKit
enum FolderSizeCalculatorError: Error {
case urlUnreachableOrNotDirectory
case failToEnumerateDirectoryContent
case failToGenerateString
}
class FolderSizeCalculator {
private let fileManager: FileManager
@victorBaro
victorBaro / pipDynamics.playground
Created August 17, 2021 05:02
Dynamics Playground - PIP using field behaviors
import UIKit
import PlaygroundSupport
class DummyVC: UIViewController {
let margin: CGFloat = 20
override func viewDidLoad() {
view.backgroundColor = .green
view.addSubview(pipView)
@victorBaro
victorBaro / ArrayExtensions.swift
Created December 12, 2018 16:17
Array extension for grouping its values
extension Array {
func grouped<T: Equatable>(by value: (Element) -> T) -> [[Element]] {
var result = [[Element]]()
for element in self {
var foundIndex: Int?
for (index, internalArray) in result.enumerated() {
if let firstValue = internalArray.first, value(firstValue) == value(element) {
foundIndex = index
continue
}
@victorBaro
victorBaro / PaddingLabel.swift
Created December 6, 2018 18:45
PaddingLabel is a subclass of UILabel that allows you to specify internal padding. Specially useful for labels with background color or/and border.
class PaddingLabel: UILabel {
var padding: UIEdgeInsets {
didSet {
invalidateIntrinsicContentSize()
}
}
public required init(padding: UIEdgeInsets = .zero) {
self.padding = padding
super.init(frame: CGRect.zero)
@victorBaro
victorBaro / MagnifyingSuperview.swift
Created September 1, 2018 22:40
Control magnifying glass view from another view
class ViewController: UIViewController {
//Set your views and long press recognizer to magnifyControlView
private func handleMagnify(_ recognizer: UILongPressGestureRecognizer) {
let point = recognizer.location(in: magnifyControlView).multiplyValues(by: controlScale)
switch recognizer.state {
case .began:
magnifyView = MagnifyingView(viewToMagnify: comicPageImageView, size: CGSize(width: 200, height: 200))
@victorBaro
victorBaro / MagnifyingView.swift
Created September 1, 2018 22:12
A magnifying glass effect view to show on top of screen content as seen in this video: https://www.youtube.com/watch?v=MppiS0iD3qY
public class MagnifyingView: UIView {
private weak var viewToMagnify: UIView!
private var touchPoint: CGPoint!
var zoomScale: CGFloat = 2
public required init?(coder aDecoder: NSCoder) { fatalError() }
public init(viewToMagnify: UIView, size: CGSize) {
self.viewToMagnify = viewToMagnify
super.init(frame: CGRect(origin: .zero, size: size))
@victorBaro
victorBaro / imagePressed.swift
Last active May 18, 2016 02:52
Zoom image while being pressed
func imagePressed(sender: ForceGestureRecognizer) {
let point = sender.locationInView(self.view)
let imageCoordPoint = CGPointMake(point.x - initialFrame.origin.x, point.y - initialFrame.origin.y)
var xValue = max(0, imageCoordPoint.x / initialFrame.size.width)
var yValue = max(0, imageCoordPoint.y / initialFrame.size.height)
xValue = min(xValue, 1)
yValue = min(yValue, 1)
@victorBaro
victorBaro / ForceButton.swift
Created October 18, 2015 21:10
Function for controlling button's shadow based on input force
func shadowWithAmount(amount: CGFloat) {
self.layer.shadowColor = shadowColor.CGColor
self.layer.shadowOpacity = shadowOpacity
let widthFactor = maxShadowOffset.width/maxForceValue
let heightFactor = maxShadowOffset.height/maxForceValue
self.layer.shadowOffset = CGSize(width: maxShadowOffset.width - amount * widthFactor, height: maxShadowOffset.height - amount * heightFactor)
self.layer.shadowRadius = maxShadowRadius - amount
}
@victorBaro
victorBaro / ForceGestureRecognizer.swift
Last active May 5, 2018 21:29
Custom GestureRecognizer for Force Touch
import UIKit.UIGestureRecognizerSubclass
class ForceGestureRecognizer: UIGestureRecognizer {
var forceValue: CGFloat = 0
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent) {
super.touchesBegan(touches, withEvent: event)
state = .Began
handleForceWithTouches(touches)
@IBAction func viewDragged(sender: UIPanGestureRecognizer) {
let yTranslation = sender.translationInView(view).y
if (hasExceededVerticalLimit(topViewConstraint.constant)){
totalTranslation += yTranslation
topViewConstraint.constant = logConstraintValueForYPoisition(totalTranslation)
if(sender.state == UIGestureRecognizerState.Ended ){
animateViewBackToLimit()
}
} else {
topViewConstraint.constant += yTranslation