From 20e80780b077a16ebd55d9069f4d59d9f6ac9e69 Mon Sep 17 00:00:00 2001 From: Martin Velev Date: Thu, 16 Sep 2021 22:13:46 -0500 Subject: [PATCH] License and readme update --- .DS_Store | Bin 0 -> 10244 bytes .../IDEFindNavigatorScopes.plist | 5 + .../UserInterfaceState.xcuserstate | Bin 0 -> 233210 bytes Blurred-ios/.DS_Store | Bin 0 -> 10244 bytes Blurred-ios/Assets.xcassets/.DS_Store | Bin 0 -> 6148 bytes Blurred-ios/Storyboards/.DS_Store | Bin 0 -> 6148 bytes .../Settings/AdditonalSettings.storyboard | 5 +- License | 7 + Liscence | 3 - Pods/FlowCommoniOS/LICENSE | 19 ++ Pods/FlowCommoniOS/README.md | 103 ++++++ .../FlowCommoniOSFiles/Animation.swift | 204 ++++++++++++ .../CAKeyframeAnimation+Extension.swift | 32 ++ .../CAMediaTimingFunction+Extension.swift | 51 +++ .../CATransaction+Extension.swift | 29 ++ .../FlowCommoniOSFiles/CGPath+SVG.swift | 310 ++++++++++++++++++ .../NSMutableParagraphStyle+Extension.swift | 45 +++ .../NSShadow+Extension.swift | 29 ++ .../FlowCommoniOSFiles/ShapeView.swift | 77 +++++ .../Sources/FlowCommoniOSFiles/Sound.swift | 31 ++ .../Sources/FlowCommoniOSFiles/TextView.swift | 30 ++ .../Sources/FlowCommoniOSFiles/Timeline.swift | 198 +++++++++++ .../UIImage+Extension.swift | 35 ++ .../FlowCommoniOSFiles/UIView+Extension.swift | 30 ++ ...ds-Blurred-ios-Blurred-iosUITests.xcscheme | 2 +- .../xcschemes/Pods-Blurred-ios.xcscheme | 2 +- .../xcschemes/Pods-Blurred-iosTests.xcscheme | 2 +- .../xcschemes/Texture.xcscheme | 2 +- .../PINRemoteImage/PINRemoteImage-prefix.pch | 12 - README.md | 19 +- 30 files changed, 1256 insertions(+), 26 deletions(-) create mode 100755 .DS_Store create mode 100644 Blurred-ios.xcworkspace/xcuserdata/martinvelev.xcuserdatad/IDEFindNavigatorScopes.plist create mode 100755 Blurred-ios.xcworkspace/xcuserdata/martinvelev.xcuserdatad/UserInterfaceState.xcuserstate create mode 100755 Blurred-ios/.DS_Store create mode 100644 Blurred-ios/Assets.xcassets/.DS_Store create mode 100755 Blurred-ios/Storyboards/.DS_Store create mode 100644 License delete mode 100755 Liscence create mode 100644 Pods/FlowCommoniOS/LICENSE create mode 100644 Pods/FlowCommoniOS/README.md create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Animation.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CAKeyframeAnimation+Extension.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CAMediaTimingFunction+Extension.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CATransaction+Extension.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CGPath+SVG.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/NSMutableParagraphStyle+Extension.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/NSShadow+Extension.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/ShapeView.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Sound.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/TextView.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Timeline.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/UIImage+Extension.swift create mode 100644 Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/UIView+Extension.swift delete mode 100644 Pods/Target Support Files/PINRemoteImage/PINRemoteImage-prefix.pch diff --git a/.DS_Store b/.DS_Store new file mode 100755 index 0000000000000000000000000000000000000000..1e1fe4ed5026d92f9527ea7e5a62101e65eeef04 GIT binary patch literal 10244 zcmeI1&uZzArQBmpl%}$&ddpC|js!%l}?Y{NQdo%Ms zGy8UCOhh8PT%IIyiO9jlGPM)8h{WZ5^`(T$ISeUaPu}8WzU0>$eVR7I60ig;0ZYIV zums*00{CWga(0B$-Yo%3z!K;Z;P~L;Vwq906G|C6aFbgA$Rx65!gGorAYCOhN_Ikt z5+o6tLWZV7Z81b>j(k_?Wt8lMGBhWlHXlN@EYuD~$ktK6E7eJ4LTT@ofF;mRfcNf6 znxI9hQp?!C&n{fo%W8fuSM>ZM@|@g#e$({xI6d8mC-=r)-8vzCi0ntrU-xH_uHl;u zm9zuCd9)0ln((hopMbAVL63J2(No>K7^`ACXecHxiVd$Cw9@I{L}E*F>$dHVGwO`) z8lBHC`R#nG&{__%h2}T>Yqro@Dyru>-}k!Dh2odhN_!!-=X1Z_Dpc#0rZldWD^NNA zRkdFB+gX3PUJhhE`LMuoMx2p_)cDHE)RFW-_tUA>gYL?)DLfucA6{J@amM#g9-p~T zyYl_Y535&yiFneGwY$?O624V~$^@66Qb|^C5Dsi;rNf&xRptGMI_^KZomw&hgxf zpa1YejzhGsvwgc74Bp}?9H8+HNw&eVNtX~m8i*n#s+jMVxQQBcnnTuR5KY{#4BsD} z>cZdCYtd%Ne&}T1z7~US;xDF~ilIA)`592FH&%&PJv;~68w6<^M}&bkIx?oFx{Nl}raqg7wT)oq zV6M~$e7)~#U++GBlfm>8FzD0K{r&yd>9si#p|?HBIc^cp6fTIZf>5C=A z-)Y^C?KCSR`9)ZHeUXRbxURj^)Rw$_v~npTV(E5CW!JN6kZ)q7o|wFE4I z_nd%8=JL5LI=OaO)7xJ@Yj<&7z{QF6I-!&%xUmZ7%j0 + + + + diff --git a/Blurred-ios.xcworkspace/xcuserdata/martinvelev.xcuserdatad/UserInterfaceState.xcuserstate b/Blurred-ios.xcworkspace/xcuserdata/martinvelev.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100755 index 0000000000000000000000000000000000000000..33b8b49704b644f267f07e97a01e41b5d51bc203 GIT binary patch literal 233210 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 literal 0 HcmV?d00001 diff --git a/Blurred-ios/.DS_Store b/Blurred-ios/.DS_Store new file mode 100755 index 0000000000000000000000000000000000000000..db57919a387b138d160b6e047f34bf7682d19688 GIT binary patch literal 10244 zcmeHMUr*FP5T8ZRf`33I!Duk`!Ndn3CnhKlCdY|J9x%o;_@D+_TDc~*ORhanM9jVW z1@y(Q;MedQ_*s0?-^^BQi=gmeAnsmfXSfS8Y*LiL-% z@0oU#zP#rWxPm@WNHJ)QJj!-R+YXC>MZh9p5wHkY1P%iN_-1o)P8x1&i-1MIBCw4B z?+-4Bc|GSn!)5D0B}V}8esoJg8|MJgadTeJdCzcBg-vsMP`Rqgj~L3RQY26C|ij2 zsvm0~(!9XtKvUnPphYx{o)o_j=l&FWuW1!`0NXtk?a%wu_PgnNKK2)XJ&w|>R{N^@ zj`a^5KjAn-&d}+h=gpSxHZw2lqz$kAl%F1YSCE{}|DZcfkCCfu9TTNCc)>@=FUYB#pF2A#31 z*KaSZyxe%R`F88w2SJ5YzF7gEa`}kIKVbH%*-m1etU;2kj8g-5D;;X%7g9izh>Hfo zljv`w9pKg_q6GCM-G_vSo)B-Qs8vQ^eS@`P>_#h=r=XW0juD7&b6)1pY1vL6dseh_ zp<-t__t0cRAa_C@tZDHqrl4$3y|36iM|YsJN-d1Ph*knxL!0NcS6+T95n~0o6Dn%Sw`0M3S@p z1&DVoZZoFo0ewNtN+X;HA{x{IEwV@W8N_*~+$EDaQY9;6^a#4Eu++x9%u08qFBYG9 zPjI(AuFP8E^{x=Fi`0ZQ#+%pIfiUM4q>45jv6%^eybo1;kQf!^hpX~H!v{(UW`aDf ztOSl*QTrscGeKhmT3Y53>==_{@fTW$?h7+J;m*t!zA!Tf`oipjQRT}rjP=(-CTQSk zcKkh7zT{;QQEX7QSOhEr76FTZMZh9(gb+Ape0BN$|L*Sp{~w_lSywFr7J>aDp!(;V z^9^YIysoMm;JbDgv;yM7ay`RE1(jUKgUfY19{4)`8i-|U%(257rEBhJxNB)7o z<4lr@QuQPvWdi`u1kf?-(5;k85jgwAD!FdRUnPUxNxP}0( zAex9~$A4si&TbJppz+)y_;`LP_Oo!1-h^EpV$@4`(~Z-tUVjyZnd0o+yp&~GUM!#c z9X;@~AnT{ipm$2W!yxN~&OXw*`)&u}aU2aUD$9F1$$~hEdL}t;M;LN;5+`jvXzG5_ zPR%^N9gwmlOBa>uaM;+~sj02TsHTQHje1RO*EdF^lB}+-?;c!U-`x)%MvqUHW`SR% zktK&?ct+!g9pC!Bq^pxFj2h1{&SYc;m;q*BS{QKmn_QTd4e>sh0cPOW7@+$>p%Quy zbBpHcz=nPwX}m~Cf;PP+2$e(6VQvveP=rlIw5h^9F@#M=zjAS&!`z}x2VqvmdECmv zy-U6r>YS-*m zdsefj?cGMre$Z&mW+kh7zxi2G@ zI;4Z&8x#AmlEuO}Ld+zm2;=Bewmb)Rw&IWKe=7Q&x5OG?#4unOFbpg*Al3&PD$vn5 zS16Yb6!HiFETUNoZ1KAwVr-3$#<@cDK$r>zs!*nn7)*tu-PV4N#<@ZjPD~#@n7%X9 zCln^{j{LTCC*~+LrD4D@u*^U~RV!luf3p4jzZ_(0h5^ICKg9qmcHM3VQ__3u+T_Gu uYeP?2gu9- literal 0 HcmV?d00001 diff --git a/Blurred-ios/Storyboards/Settings/AdditonalSettings.storyboard b/Blurred-ios/Storyboards/Settings/AdditonalSettings.storyboard index 01ed668..eb7976d 100755 --- a/Blurred-ios/Storyboards/Settings/AdditonalSettings.storyboard +++ b/Blurred-ios/Storyboards/Settings/AdditonalSettings.storyboard @@ -114,10 +114,10 @@ - + - + @@ -144,7 +144,6 @@ - diff --git a/License b/License new file mode 100644 index 0000000..7ee40ae --- /dev/null +++ b/License @@ -0,0 +1,7 @@ +Copyright 2021 Martin Velev + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Liscence b/Liscence deleted file mode 100755 index 8254785..0000000 --- a/Liscence +++ /dev/null @@ -1,3 +0,0 @@ -This is closed source. You may not do ANYTHING in the repository without direct permission from the owner (martiniam) -Copyright(c) BlurrMC 2020, All right reserved -Nobody else can copy, distribute, or modify this work without being at risk of take-downs, shake-downs, or litigation. \ No newline at end of file diff --git a/Pods/FlowCommoniOS/LICENSE b/Pods/FlowCommoniOS/LICENSE new file mode 100644 index 0000000..e36ae46 --- /dev/null +++ b/Pods/FlowCommoniOS/LICENSE @@ -0,0 +1,19 @@ +Copyright © 2016-2020 JABT Labs Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Pods/FlowCommoniOS/README.md b/Pods/FlowCommoniOS/README.md new file mode 100644 index 0000000..5d1aa04 --- /dev/null +++ b/Pods/FlowCommoniOS/README.md @@ -0,0 +1,103 @@ +# Flow Common Files for iOS +A major goal behind our efforts here at Flow is to produce the cleanest code possible. For any platform, this means conforming to industry standards. For iOS, in particular, it means staying away from 3rd party libraries. + +To make things as clean as possible, we include with every export a few files that extend the native functionality of iOS classes. + +## Installation + +### CocoaPods +To install `FlowCommoniOS` using CocoaPods add `pod 'FlowCommoniOS'` to your projects Podfile and run `pod install` in your projects directory. +If you've never used CocoaPods before refer to https://guides.cocoapods.org/using/getting-started.html. + +## Classes + +There are 6 classes that are required for running any iOS project that uses Flow timelines. A few of these are relatively small subclasses, such as `TextView`. There are also a few larger classes, such as `Animation` and `Timeline` that are critical for bringing lovely Flow functionality to your apps. + +You can find all of the common files in any iOS project exported from Flow. From the XCode project navigator, you can find them in the `FlowCommon` directory. + +![Flow Common Files in Xcode](https://createwithflow.com/assets/images/api/flowcommon/xcodeFlowCommon.png) + +### Animation +An `Animation` object represents the details of a specific animation, including timing, the layer being animated, as well as methods for playback and control. + +> Our [Animation](https://createwithflow.com/api/flowcommon/animation/) doc is an in-depth view of this class. + +### Timeline +A `Timeline` object represents a set of animations associated with a view. It contains references to the main view being animated, as well as the duration, sounds, and other options such as repeat. This class is responsible for initiating and controlling the playback for all animations associated with the view. + +> Our [Timeline](https://createwithflow.com/api/flowcommon/timeline) doc is an in-depth view of this class. + +### SVG Parser +The `SVGPathStringParser` class is responsible for converting an SVG string into a `CGPath`. It is super useful, and you can even use it on its own outside of a Flow project. + +> Our [SVGPathStringParser](https://createwithflow.com/api/flowcommon/svgpathstringparser) doc is an in-depth view of this class. + +There is also an `SVGPathStringTokenizer` class that breaks down an SVG string into its component (i.e. token) elements, so that it can be accurately rebuilt as a `CGPath`. + +With these classes, parsing an SVG string is as simple as: + +`let string = CGPathCreateWithSVGString("M0...")` + +> Our [SVGPathStringTokenizer](https://createwithflow.com/api/flowcommon/svgpathstringparser) doc is an in-depth view of this class. + +### Shape View +A `ShapeView` object is a simple subclass of `UIView` that includes variables for: + +* `shapeLayer: CAShapeLayer` +* `gradientLayer: CAGradientLayer?` +* `path: CGPath?` + +> Our [Shape View](https://createwithflow.com/api/flowcommon/shapeview) doc is an in-depth view of this class. + +### Text View +A `TextView` is a simple subclass of `UILabel` that exposes a `textLayer` variable. + +> Our [Text View](https://createwithflow.com/api/flowcommon/textview) doc is an in-depth view of this class. + +### Sound +A `Sound` object contains an `AVAudioPlayer`, once created it will play a sound after a specific `TimeInterval` has elapsed. + +> Our [Sound](https://createwithflow.com/api/flowcommon/sound) doc is an in-depth view of this class. + +## Extensions +There are a few simple extensions to native iOS classes that are necessary for running Flow animations in an iOS project. Many of these bring a lot of power and functionality that can be used outside of Flow-related projects. + +### CAKeyframeAnimation +This extension defines a variable called `reversed` that reverses the timing and values of a standard `CAKeyframeAnimation` object. + +> Our [CAKeyframeAnimation](https://createwithflow.com/api/flowcommon/cakeyframeanimation) doc is an in-depth view of this extension. + +### CAMediaTimingFunction +This extension adds new variables and options to the standard iOS timing functions. For example, it defines a `var reversed` that returns the reversed version of the current timing function. + +> Our [CAMediaTimingFunction](https://createwithflow.com/api/flowcommon/camediatimingfunction) doc is an in-depth view of this extension. + +### CATransaction +This extension adds an incredibly handy function responsible for suppressing animations. This is super handy for anyone who uses Core Animation. + +> Our [CATransaction](https://createwithflow.com/api/flowcommon/catransaction) doc is an in-depth view of this extension. + +### CharacterSet +This extension adds a useful function for determining if a particular character is part of the current character set. + +> Our [CharacterSet](https://createwithflow.com/api/flowcommon/characterset) doc is an in-depth view of this extension. + +### NSMutableParagraphStyle +This extension adds a handy initialization method for creating paragraph styles. + +> Our [NSMutableParagraphStyle](https://createwithflow.com/api/flowcommon/nsmutableparagraphstyle) doc is an in-depth view of this extension. + +### NSShadow +This extension adds a handy initialization method for creating shadows. + +> Our [NSShadow](https://createwithflow.com/api/flowcommon/nsshadow) doc is an in-depth view of this extension. + +### UIImage +This extension adds a convenient method for resizing images. + +> Our [UIImage](https://createwithflow.com/api/flowcommon/uiimage) doc is an in-depth view of this extension. + +### UIView +This extension adds a convenient method for setting the `transform` property on a view. + +> Our [UIView](https://createwithflow.com/api/flowcommon/uiview) doc is an in-depth view of this extension. diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Animation.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Animation.swift new file mode 100644 index 0000000..475b1a9 --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Animation.swift @@ -0,0 +1,204 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import UIKit + +open class Animation: NSObject, CAAnimationDelegate { + /// Key frame animations which animate the properties of `layer`. + fileprivate var keyframeAnimations: [CAKeyframeAnimation] + + /// The CALayer whose properties are animated. + open var layer: CALayer + + /// Specifies whether or not the animation should autoreverse. + var autoreverses: Bool + + /// The length of the animation + var duration: TimeInterval { + guard let anim = keyframeAnimations.first else { + return 0 + } + return anim.duration + } + + /// The length of time an animation will repeat. + /// + /// Calculated using repeatCount and duration. + var repeatDuration: TimeInterval { + return duration * TimeInterval(repeatCount == 0 ? 1 : repeatCount) + } + + /// Determines the number of times the animation will repeat. + /// + /// May be fractional. If the repeatCount is 0, it is ignored. + /// Setting this property to greatestFiniteMagnitude will cause the animation to repeat forever. + var repeatCount: Float + + weak var delegate: AnimationDelegate? + + /// The current time of the animation. i.e. what time is being displayed. + var time: TimeInterval { + return layer.timeOffset + } + + /// True if the animation is playing. + var playing: Bool { + return layer.speed != 0.0 + } + + /// To track the unconverted start time of an animation + private var startTime: TimeInterval = 0 + + // MARK: - Initializers + + public init(layer: CALayer, keyframeAnimations: [CAKeyframeAnimation], autoreverses: Bool = false, repeatCount: Float = 0) { + self.layer = layer + self.keyframeAnimations = keyframeAnimations + self.autoreverses = autoreverses + self.repeatCount = repeatCount + + super.init() + keyframeAnimations.forEach(configure) + reset() + } + + private func configure(keyframeAnimation: CAKeyframeAnimation) { + keyframeAnimation.delegate = self + keyframeAnimation.isRemovedOnCompletion = false + keyframeAnimation.fillMode = .both + keyframeAnimation.autoreverses = autoreverses + keyframeAnimation.repeatDuration = repeatDuration + } + + // MARK: - Playing & Resetting Animation + + /// Resumes the animation from where it was paused. + open func play() { + //track the actual start time when the animation begins playing + startTime = layer.convertTime(CACurrentMediaTime(), from: layer) + let pausedTime = layer.timeOffset + layer.speed = 1.0 + layer.timeOffset = 0.0 + layer.beginTime = 0.0 + let timeSincePause = layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime + + for keyframeAnimation in keyframeAnimations { + keyframeAnimation.timeOffset = 0 + } + layer.beginTime = timeSincePause + } + + /// Pauses the animation. + open func pause() { + let currentTime = layer.convertTime(CACurrentMediaTime(), from: nil) + layer.speed = 0 + offset(to: currentTime) + } + + /// Resets the animation to time 0, + /// and asychronously executes the completion block when the animation is ready to be played. + open func reset(onCompletion: ((Animation) -> Void)? = nil) { + //reset the start time + startTime = layer.convertTime(CACurrentMediaTime(), from: layer) + CATransaction.suppressAnimations { + layer.removeAllAnimations() + + layer.speed = 0 + + for keyframeAnimation in keyframeAnimations { + layer.setValue(keyframeAnimation.values?.first, forKeyPath: keyframeAnimation.keyPath!) + } + + offset(to: 0) + + DispatchQueue.main.async { [weak self] in + self?.addAllAnimations(onCompletion: onCompletion) + } + } + } + + /// Adds all the animations to `layer` so they can be played. + private func addAllAnimations(onCompletion: ((Animation) -> Void)? = nil) { + for keyframeAnimation in keyframeAnimations { + layer.add(keyframeAnimation, forKey: keyframeAnimation.keyPath) + } + + onCompletion?(self) + } + + // MARK: - Driving Animation + + /// Shows the animation at time `time`. + public func offset(to newTime: TimeInterval) { + let currentTime = layer.convertTime(CACurrentMediaTime(), from: layer) - startTime + let beginTime = currentTime - newTime + layer.beginTime = beginTime + layer.timeOffset = newTime + for keyframeAnimation in keyframeAnimations { + keyframeAnimation.beginTime = beginTime + keyframeAnimation.timeOffset = newTime + } + } + + /// Shows the animation at its end where `time` is equal to `duration`. + public func offsetToEnd() { + //if the animation autoreverses then the end is equivalent to the beginning + if autoreverses { + reset() + } else { + let beginTime = startTime + layer.beginTime = beginTime + layer.timeOffset = repeatDuration + for keyframeAnimation in keyframeAnimations { + keyframeAnimation.beginTime = beginTime + keyframeAnimation.timeOffset = repeatDuration + } + } + } + + // MARK: - CAAnimationDelegate + + public func animationDidStop(_ anim: CAAnimation, finished flag: Bool) { + guard flag else { + return + } + + //Default behaviour of Core Animation is to allow speed to remain unchanged + //Even if the animation has stopped + layer.speed = 0 + + offsetToEnd() + + if let keyframeAnimation = anim as? CAKeyframeAnimation, + keyframeAnimations.first?.keyPath == keyframeAnimation.keyPath { + delegate?.didStop(animation: self) + } + } +} + +public extension Animation { + var reversed: Animation { + let reversedKeyFrameAnimations = keyframeAnimations.map { $0.reversed } + return Animation(layer: layer, keyframeAnimations: reversedKeyFrameAnimations) + } +} + +protocol AnimationDelegate: class { + func didStop(animation: Animation) +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CAKeyframeAnimation+Extension.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CAKeyframeAnimation+Extension.swift new file mode 100644 index 0000000..917f8e5 --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CAKeyframeAnimation+Extension.swift @@ -0,0 +1,32 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import Foundation +import UIKit + +public extension CAKeyframeAnimation { + var reversed: CAKeyframeAnimation { + let reversed = CAKeyframeAnimation(keyPath: keyPath) + reversed.keyTimes = keyTimes?.reversed().map { NSNumber(floatLiteral: 1.0 - $0.doubleValue) } + reversed.values = values?.reversed() + reversed.timingFunctions = timingFunctions?.reversed().map { $0.reversed } + reversed.duration = duration + return reversed + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CAMediaTimingFunction+Extension.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CAMediaTimingFunction+Extension.swift new file mode 100644 index 0000000..9246921 --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CAMediaTimingFunction+Extension.swift @@ -0,0 +1,51 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import Foundation +import UIKit + +public extension CAMediaTimingFunction { + static let linear = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) + static let easeIn = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn) + static let easeOut = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut) + static let easeInEaseOut = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut) + + var reversed: CAMediaTimingFunction { + let (c1, c2) = controlPoints + let x1 = Float(1 - c2.x) + let y1 = Float(1 - c2.y) + let x2 = Float(1 - c1.x) + let y2 = Float(1 - c1.y) + return CAMediaTimingFunction(controlPoints: x1, y1, x2, y2) + } + + var controlPoints: (CGPoint, CGPoint) { + var c1: [Float] = [0, 0] + var c2: [Float] = [0, 0] + getControlPoint(at: 1, values: &c1) + getControlPoint(at: 2, values: &c2) + + let c1x = CGFloat(c1[0]) + let c1y = CGFloat(c1[1]) + let c2x = CGFloat(c2[0]) + let c2y = CGFloat(c2[1]) + + return (CGPoint(x: c1x, y: c1y), CGPoint(x: c2x, y: c2y)) + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CATransaction+Extension.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CATransaction+Extension.swift new file mode 100644 index 0000000..fc3840b --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CATransaction+Extension.swift @@ -0,0 +1,29 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import UIKit + +extension CATransaction { + static public func suppressAnimations(actions: () -> Void) { + begin() + setAnimationDuration(0) + actions() + commit() + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CGPath+SVG.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CGPath+SVG.swift new file mode 100644 index 0000000..63eda8b --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/CGPath+SVG.swift @@ -0,0 +1,310 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import QuartzCore + +public func CGPathCreateWithSVGString(_ string: String) -> CGPath? { + let parser = SVGPathStringParser() + return try? parser.parse(string) +} + +class SVGPathStringParser { + enum Error: Swift.Error { + case invalidSyntax + case missingValues + } + + let path = CGMutablePath() + var currentPoint = CGPoint() + var lastControlPoint = CGPoint() + + var command: UnicodeScalar? + var values = [CGFloat]() + + func parse(_ string: String) throws -> CGPath { + let tokens = SVGPathStringTokenizer(string: string).tokenize() + + for token in tokens { + switch token { + case .command(let c): + command = c + values.removeAll() + + case .value(let v): + values.append(v) + } + + do { + try addCommand() + } catch Error.missingValues { + // Ignore + } + } + + return path + } + + fileprivate func addCommand() throws { + guard let command = command else { + return + } + + switch command { + case "M": + if values.count < 2 { throw Error.missingValues } + path.move(to: CGPoint(x: values[0], y: values[1])) + currentPoint = CGPoint(x: values[0], y: values[1]) + lastControlPoint = currentPoint + values.removeFirst(2) + + case "m": + if values.count < 2 { throw Error.missingValues } + let point = CGPoint(x: currentPoint.x + values[0], y: currentPoint.y + values[1]) + path.move(to: point) + currentPoint.x += values[0] + currentPoint.y += values[1] + lastControlPoint = currentPoint + values.removeFirst(2) + + case "L": + if values.count < 2 { throw Error.missingValues } + let point = CGPoint(x: values[0], y: values[1]) + path.addLine(to: point) + currentPoint = CGPoint(x: values[0], y: values[1]) + lastControlPoint = currentPoint + values.removeFirst(2) + + case "l": + if values.count < 2 { throw Error.missingValues } + let point = CGPoint(x: currentPoint.x + values[0], y: currentPoint.y + values[1]) + path.addLine(to: point) + currentPoint.x += values[0] + currentPoint.y += values[1] + lastControlPoint = currentPoint + values.removeFirst(2) + + case "H": + if values.count < 1 { throw Error.missingValues } + let point = CGPoint(x: values[0], y: currentPoint.y) + path.addLine(to: point) + currentPoint.x = values[0] + lastControlPoint = currentPoint + values.removeFirst(1) + + case "h": + if values.count < 1 { throw Error.missingValues } + let point = CGPoint(x: currentPoint.x + values[0], y: currentPoint.y) + path.addLine(to: point) + currentPoint.x += values[0] + lastControlPoint = currentPoint + values.removeFirst(1) + + case "V": + if values.count < 1 { throw Error.missingValues } + let point = CGPoint(x: currentPoint.x, y: values[0]) + path.addLine(to: point) + currentPoint.y = values[0] + lastControlPoint = currentPoint + values.removeFirst(1) + + case "v": + if values.count < 1 { throw Error.missingValues } + let point = CGPoint(x: currentPoint.x, y: currentPoint.y + values[0]) + path.addLine(to: point) + currentPoint.y += values[0] + lastControlPoint = currentPoint + values.removeFirst(1) + + case "C": + if values.count < 6 { throw Error.missingValues } + let c1 = CGPoint(x: values[0], y: values[1]) + let c2 = CGPoint(x: values[2], y: values[3]) + let to = CGPoint(x: values[4], y: values[5]) + path.addCurve(to: to, control1: c1, control2: c2) + lastControlPoint = c2 + currentPoint = to + values.removeFirst(6) + + case "c": + if values.count < 6 { throw Error.missingValues } + let c1 = CGPoint(x: currentPoint.x + values[0], y: currentPoint.y + values[1]) + let c2 = CGPoint(x: currentPoint.x + values[2], y: currentPoint.y + values[3]) + let to = CGPoint(x: currentPoint.x + values[4], y: currentPoint.y + values[5]) + path.addCurve(to: to, control1: c1, control2: c2) + lastControlPoint = c2 + currentPoint = to + values.removeFirst(6) + + case "S": + if values.count < 4 { throw Error.missingValues } + var c1 = CGPoint() + c1.x = currentPoint.x + (currentPoint.x - lastControlPoint.x) + c1.y = currentPoint.y + (currentPoint.y - lastControlPoint.y) + let c2 = CGPoint(x: values[0], y: values[1]) + let to = CGPoint(x: values[2], y: values[3]) + path.addCurve(to: to, control1: c1, control2: c2) + lastControlPoint = c2 + currentPoint = to + values.removeFirst(4) + + case "s": + if values.count < 4 { throw Error.missingValues } + var c1 = CGPoint() + c1.x = currentPoint.x + (currentPoint.x - lastControlPoint.x) + c1.y = currentPoint.y + (currentPoint.y - lastControlPoint.y) + let c2 = CGPoint(x: currentPoint.x + values[0], y: currentPoint.y + values[1]) + let to = CGPoint(x: currentPoint.x + values[2], y: currentPoint.y + values[3]) + path.addCurve(to: to, control1: c1, control2: c2) + lastControlPoint = c2 + currentPoint = to + values.removeFirst(4) + + case "Q": + if values.count < 4 { throw Error.missingValues } + let control = CGPoint(x: values[0], y: values[1]) + let to = CGPoint(x: values[2], y: values[3]) + path.addQuadCurve(to: to, control: control) + lastControlPoint = control + currentPoint = to + values.removeFirst(4) + + case "q": + if values.count < 4 { throw Error.missingValues } + let control = CGPoint(x: currentPoint.x + values[0], y: currentPoint.y + values[1]) + let to = CGPoint(x: currentPoint.x + values[2], y: currentPoint.y + values[3]) + path.addQuadCurve(to: to, control: control) + lastControlPoint = control + currentPoint = to + values.removeFirst(4) + + case "T": + if values.count < 2 { throw Error.missingValues } + var control = CGPoint() + control.x = currentPoint.x + (currentPoint.x - lastControlPoint.x) + control.y = currentPoint.y + (currentPoint.y - lastControlPoint.y) + let to = CGPoint(x: values[0], y: values[1]) + path.addQuadCurve(to: to, control: control) + lastControlPoint = control + currentPoint = to + values.removeFirst(2) + + case "t": + if values.count < 2 { throw Error.missingValues } + var control = CGPoint() + control.x = currentPoint.x + (currentPoint.x - lastControlPoint.x) + control.y = currentPoint.y + (currentPoint.y - lastControlPoint.y) + let to = CGPoint(x: currentPoint.x + values[0], y: currentPoint.y + values[1]) + path.addQuadCurve(to: to, control: control) + lastControlPoint = control + currentPoint = to + values.removeFirst(2) + + case "Z", "z": + path.closeSubpath() + self.command = nil + + default: + throw Error.invalidSyntax + } + } +} + +class SVGPathStringTokenizer { + enum Token { + case command(UnicodeScalar) + case value(CGFloat) + } + + let separatorCharacterSet = CharacterSet(charactersIn: " \t\r\n,") + let commandCharacterSet = CharacterSet(charactersIn: "mMLlHhVvzZCcSsQqTt") + let numberStartCharacterSet = CharacterSet(charactersIn: "-+.0123456789") + let numberCharacterSet = CharacterSet(charactersIn: ".0123456789eE") + + var string: String + var range: Range + + init(string: String) { + self.string = string + range = string.unicodeScalars.startIndex.. [Token] { + var array = [Token]() + while let token = nextToken() { + array.append(token) + } + return array + } + + func nextToken() -> Token? { + skipSeparators() + + guard let c = get() else { + return nil + } + + if commandCharacterSet.isMember(c) { + return .command(c) + } + + if numberStartCharacterSet.isMember(c) { + var numberString = String(c) + while let c = peek(), numberCharacterSet.isMember(c) { + numberString += String(c) + get() + } + + if let value = Double(numberString) { + return .value(CGFloat(value)) + } + } + + return nil + } + + @discardableResult + func get() -> UnicodeScalar? { + guard range.lowerBound != range.upperBound else { + return nil + } + let c = string.unicodeScalars[range.lowerBound] + range = string.unicodeScalars.index(after: range.lowerBound).. UnicodeScalar? { + guard range.lowerBound != range.upperBound else { + return nil + } + return string.unicodeScalars[range.lowerBound] + } + + func skipSeparators() { + while range.lowerBound != range.upperBound && separatorCharacterSet.isMember(string.unicodeScalars[range.lowerBound]) { + range = string.unicodeScalars.index(after: range.lowerBound).. Bool { + return contains(UnicodeScalar(c.value)!) + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/NSMutableParagraphStyle+Extension.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/NSMutableParagraphStyle+Extension.swift new file mode 100644 index 0000000..d7d80ae --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/NSMutableParagraphStyle+Extension.swift @@ -0,0 +1,45 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import UIKit + +extension NSMutableParagraphStyle { + convenience init(alignment: NSTextAlignment, + firstLineHeadIndent: CGFloat, + headIndent: CGFloat, + tailIndent: CGFloat, + lineHeightMultiple: CGFloat, + maximumLineHeight: CGFloat, + minimumLineHeight: CGFloat, + lineSpacing: CGFloat, + paragraphSpacing: CGFloat, + paragraphSpacingBefore: CGFloat) { + self.init() + self.alignment = alignment + self.firstLineHeadIndent = firstLineHeadIndent + self.headIndent = headIndent + self.tailIndent = tailIndent + self.lineHeightMultiple = lineHeightMultiple + self.maximumLineHeight = maximumLineHeight + self.minimumLineHeight = minimumLineHeight + self.lineSpacing = lineSpacing + self.paragraphSpacing = paragraphSpacing + self.paragraphSpacingBefore = paragraphSpacingBefore + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/NSShadow+Extension.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/NSShadow+Extension.swift new file mode 100644 index 0000000..555f5f7 --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/NSShadow+Extension.swift @@ -0,0 +1,29 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import UIKit + +extension NSShadow { + convenience init(blurRadius: CGFloat, offset: CGSize, color: UIColor) { + self.init() + shadowBlurRadius = blurRadius + shadowOffset = offset + shadowColor = color + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/ShapeView.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/ShapeView.swift new file mode 100644 index 0000000..d6cce87 --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/ShapeView.swift @@ -0,0 +1,77 @@ +// Copyright © 2016-2019 JABT +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import UIKit + +open class ShapeView: UIView { + open var shapeLayer: CAShapeLayer { + return layer as! CAShapeLayer + } + + /// A sublayer which can be used to apply a gradient fill to `self`. + open var gradientLayer: CAGradientLayer? { + set { + // Remove old gradient layer + if let gradientLayer = gradientLayer { + gradientLayer.removeFromSuperlayer() + } + // Replace old gradient with new one + if let newGradientLayer = newValue { + layer.addSublayer(newGradientLayer) + } + } + + get { + return layer.sublayers?.first(where: { $0 is CAGradientLayer }) as? CAGradientLayer + } + } + + public func addGradient(type: CAGradientLayerType, startPoint: CGPoint, endPoint: CGPoint, stops: [(color: CGColor, location: NSNumber)]) { + let gradientLayer = CAGradientLayer() + gradientLayer.frame = shapeLayer.bounds + self.gradientLayer = gradientLayer + + + let mask = CAShapeLayer() + mask.path = shapeLayer.path + mask.fillColor = UIColor.black.cgColor + mask.strokeColor = nil + + gradientLayer.startPoint = startPoint + gradientLayer.endPoint = endPoint + gradientLayer.colors = stops.map { $0.color } + gradientLayer.locations = stops.map { $0.location } + gradientLayer.type = type + gradientLayer.frame = shapeLayer.bounds + gradientLayer.mask = mask + } + + open var path: CGPath? { + get { + return shapeLayer.path + } + set { + shapeLayer.path = newValue + } + } + + override open class var layerClass: AnyClass { + return CAShapeLayer.self + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Sound.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Sound.swift new file mode 100644 index 0000000..fb8f912 --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Sound.swift @@ -0,0 +1,31 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import AVFoundation + +public final class Sound { + + static func playAudio(_ audio: AVAudioPlayer, delay: TimeInterval) { + audio.prepareToPlay() + let time = DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC) + DispatchQueue.main.asyncAfter(deadline: time) { + audio.play() + } + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/TextView.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/TextView.swift new file mode 100644 index 0000000..163919c --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/TextView.swift @@ -0,0 +1,30 @@ +// Copyright © 2016-2019 JABT +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import UIKit + +open class TextView: UILabel { + open var textLayer: CATextLayer { + return layer as! CATextLayer + } + + override open class var layerClass: AnyClass { + return CATextLayer.self + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Timeline.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Timeline.swift new file mode 100644 index 0000000..3ca4bb2 --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/Timeline.swift @@ -0,0 +1,198 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import Foundation +import UIKit +import AVFoundation + +open class Timeline { + public var view: UIView + public var duration: TimeInterval + public let animations: [Animation] + public let sounds: [(sound: AVAudioPlayer, delay: TimeInterval)] + + /// Specifies whether or not the timeline's animations autoreverse. + public let autoreverses: Bool + + /// Determines the number of times the timeline's animations will repeat. + /// + /// May be fractional. If the repeatCount is 0, it is ignored. + /// Setting this property to greatestFiniteMagnitude will cause the timeline to repeat forever. + public let repeatCount: Float + + /// The length of time a Timeline will repeat. + /// + /// Calculated using repeatCount and duration. + public var repeatDuration: TimeInterval { + return duration * TimeInterval(repeatCount == 0 ? 1 : repeatCount) + } + + public var time: TimeInterval { + return animations.first?.time ?? 0 + } + + public var playing: Bool { + return animations.first?.playing ?? false + } + + public weak var delegate: TimelineDelegate? + + private var resetDispatchGroup: DispatchGroup? + + // MARK: - Initializers + + public convenience init(view: UIView, animationsByLayer: [CALayer: [CAKeyframeAnimation]], sounds: [(sound: AVAudioPlayer, delay: TimeInterval)], duration: TimeInterval, autoreverses: Bool = false, repeatCount: Float = 0) { + + let animations = animationsByLayer.map { + Animation(layer: $0.0, keyframeAnimations: $0.1, autoreverses: autoreverses, repeatCount: repeatCount) + } + + self.init(view: view, animations: animations, sounds: sounds, duration: duration, autoreverses: autoreverses, repeatCount: repeatCount) + } + + public init(view: UIView, animations: [Animation], sounds: [(sound: AVAudioPlayer, delay: TimeInterval)], duration: TimeInterval, autoreverses: Bool, repeatCount: Float) { + self.view = view + self.duration = duration + self.sounds = sounds + self.autoreverses = autoreverses + self.repeatCount = repeatCount + self.animations = animations + for animation in animations { + animation.delegate = self + } + } + + // MARK: - Timeline Playback controls + + /// Reset to the initial state of the timeline + public func reset(onCompletion: ((Timeline) -> Void)? = nil) { + // Create a dispatch group to track when all animations have reset + resetDispatchGroup = DispatchGroup() + + for animation in animations { + resetDispatchGroup?.enter() + animation.reset { [weak self] _ in self?.resetDispatchGroup?.leave() } + } + + resetDispatchGroup?.notify(queue: .main) { [weak self] in + guard let strongSelf = self else { + return + } + + strongSelf.delegate?.didReset(timeline: strongSelf) + onCompletion?(strongSelf) + } + } + + /// Resume playing the timeline. + public func play() { + pause() + + // If the timeline playback has reached the end of the timeline duration + // replay the timeline from the beginning + if time >= repeatDuration { + reset { timeline in timeline.playTimeline() } + } else { + playTimeline() + } + } + + private func playTimeline() { + playAnimations() + playSounds() + delegate?.didPlay(timeline: self) + } + + private func playAnimations() { + for animation in animations { + animation.play() + } + } + + private func playSounds() { + for (sound, delay) in sounds { + Sound.playAudio(sound, delay: delay) + } + } + + /// Pause playing of timeline. + public func pause() { + for animation in animations { + animation.pause() + } + delegate?.didPause(timeline: self) + } + + /// Show timeline at time `time`. + public func offset(to newTime: TimeInterval) { + let clampedNewTime = max(min(newTime, duration), 0) + for animation in animations { + animation.offset(to: clampedNewTime) + } + } + + /// Returns a reverses version of `self`. + var reversed: Timeline { + let reversedAnimations = animations.map { $0.reversed } + return Timeline(view: view, animations: reversedAnimations, sounds: sounds, duration: duration, autoreverses: autoreverses, repeatCount: repeatCount) + } +} + +extension Timeline: AnimationDelegate { + func didStop(animation: Animation) { + // Notify the delegate a single time, when the first animation is complete + // We can do this because all animations are CAKeyframeAnimations that have identical durations (e.g. Timeline.duration) + if animation == animations.first { + delegate?.didStop(timeline: self) + } + } +} + +public protocol TimelineDelegate: class { + /// Informs the delegate that the timeline `timeline` was reset. + func didReset(timeline: Timeline) + + /// Informs the delegate that the timeline `timeline` did start playing. + func didPlay(timeline: Timeline) + + /// Informs the delegate that the timeline `timeline` was paused. + func didPause(timeline: Timeline) + + /// Informs the delegate that the timeline `timeline` was offset. + /// + /// - Parameters: + /// - timeline: The timeline which was offset. + /// - time: The time to which `timeline` was offset to. + func didOffset(timeline: Timeline, to time: TimeInterval) + + /// Informs the delegate that the timeline `timeline` was stopped because it completed its active duration. + func didStop(timeline: Timeline) +} + +extension TimelineDelegate { + public func didReset(timeline: Timeline) { } + + public func didPlay(timeline: Timeline) { } + + public func didPause(timeline: Timeline) { } + + public func didOffset(timeline: Timeline, to time: TimeInterval) { } + + public func didStop(timeline: Timeline) { } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/UIImage+Extension.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/UIImage+Extension.swift new file mode 100644 index 0000000..3b012aa --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/UIImage+Extension.swift @@ -0,0 +1,35 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import UIKit + +extension UIImage { + func resized(to size: CGSize) -> UIImage { + let rect = CGRect(origin: .zero, size: size) + let vertical = CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: size.height) + return UIGraphicsImageRenderer(size: size).image { _ in + let ctx = UIGraphicsGetCurrentContext() + ctx?.saveGState() + ctx?.concatenate(vertical) + draw(in: rect) + ctx?.restoreGState() + UIGraphicsEndImageContext() + } + } +} diff --git a/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/UIView+Extension.swift b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/UIView+Extension.swift new file mode 100644 index 0000000..7173814 --- /dev/null +++ b/Pods/FlowCommoniOS/Sources/FlowCommoniOSFiles/UIView+Extension.swift @@ -0,0 +1,30 @@ +// Copyright © 2016-2019 JABT Labs Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: The above copyright +// notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +import UIKit + +extension UIView { + func setTransform(scaleX: CGFloat, scaleY: CGFloat, rotationAngle: CGFloat) { + var transform = CGAffineTransform.identity + transform = transform.concatenating(CGAffineTransform(scaleX: scaleX, y: 1.0)) + transform = transform.concatenating(CGAffineTransform(scaleX: 1.0, y: scaleY)) + transform = transform.concatenating(CGAffineTransform(rotationAngle: rotationAngle)) + self.transform = transform + } +} diff --git a/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-ios-Blurred-iosUITests.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-ios-Blurred-iosUITests.xcscheme index 5fa4626..6ca3dd9 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-ios-Blurred-iosUITests.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-ios-Blurred-iosUITests.xcscheme @@ -15,7 +15,7 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-ios.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-ios.xcscheme index 6436898..4f76b8d 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-ios.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-ios.xcscheme @@ -15,7 +15,7 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-iosTests.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-iosTests.xcscheme index 1bb767f..2d70210 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-iosTests.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Pods-Blurred-iosTests.xcscheme @@ -15,7 +15,7 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Texture.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Texture.xcscheme index fa26a54..2fbc316 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Texture.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/martinvelev.xcuserdatad/xcschemes/Texture.xcscheme @@ -15,7 +15,7 @@ diff --git a/Pods/Target Support Files/PINRemoteImage/PINRemoteImage-prefix.pch b/Pods/Target Support Files/PINRemoteImage/PINRemoteImage-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/Pods/Target Support Files/PINRemoteImage/PINRemoteImage-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/README.md b/README.md index ab04cd0..6161eb7 100755 --- a/README.md +++ b/README.md @@ -1,10 +1,21 @@ -# Blurred-ios -This is the Blurred social media platform for IOS! WOOOOOOO! +# BlurrMC for iOS +This is the BlurrMC social media platform for IOS! WOOOOOOO! On this version of the social media platform, you have the full featured version of Blurred. +## Note: +BlurrMC is now a defunct social media platform. I'll still accept merge requests and any plans to try and bring it "back to life", but I'm not gonna be maintaing this personally. All hosting for BlurrMC has also been stopped, so don't run the app and then come back to me asking why it no work. If you really would like to run this app, make sure to change every single "https://blurrmc.com" reference to wherever you are hosting BlurrMC's web app. # Dependencies This project depends on the rails version as well. * Cocoapods -# What is Blurred? -You might be asking right now, what is Blurred? Blurred is a social media platform created by BlurrMC. This platform is a 7 second long video app. It lets you see what is trending, what the people you follow post, and lets you upload a video. There are no algorithms to make it so that anyone that is trending is simply trending regardless of who they are or what they are doing. All videos posted are in a 4:3 ratio. There are no songs included for you to pick from and the only way to add sounds is by using an external application. This is a different social media platform compared to other ones like Tik Tok as an example. We have a more in depth web application system and is typically better as it is not sent to the Chinese government. Blurred is fully self-hosted and is not depending on external providers like AWS or Asure for the most part. +* Valet +* Alamofire +* NextLevel +* Nuke +* Texture +* PINCache +* AlamofireImage +* TTGSnackbar +* FlowCommoniOS +# What is BlurrMC? +You might be asking right now, what is BlurrMC? BlurrMC is a social media platform created by Martin Velev. This platform is a 7 second long video app. It lets you see what is trending, what the people you follow post, and lets you upload a video. There are no algorithms to make it so that anyone that is trending is simply trending regardless of who they are or what they are doing. There are no songs included for you to pick from and the only way to add sounds is by using an external application. This is a different social media platform compared to other ones like Tik Tok as an example. We have a more in depth web application system and the platform is overall better as data is not sent to the Chinese government. BlurrMC is fully self-hosted and is not depending on external providers like AWS or Asure for the most part. # Copyright Copyright Martin Velev 2021