You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
51 lines
1.4 KiB
//
|
|
// UIViewPropertyAnimator+Rx.swift
|
|
// RxSwiftExt
|
|
//
|
|
// Created by Wittemberg, Thibault on 29/03/18.
|
|
// Copyright © 2017 RxSwift Community. All rights reserved.
|
|
//
|
|
|
|
#if os(iOS)
|
|
import Foundation
|
|
import UIKit
|
|
import RxSwift
|
|
import RxCocoa
|
|
|
|
@available(iOS 10.0, *)
|
|
public extension Reactive where Base: UIViewPropertyAnimator {
|
|
/**
|
|
Bindable extension for `fractionComplete` property.
|
|
*/
|
|
public var fractionComplete: Binder<CGFloat> {
|
|
return Binder(base) { propertyAnimator, fractionComplete in
|
|
propertyAnimator.fractionComplete = fractionComplete
|
|
}
|
|
}
|
|
|
|
/// Provides a Completable that triggers the UIViewPropertyAnimator upon subscription
|
|
/// and completes once the animation ends.
|
|
///
|
|
/// - Parameter afterDelay: the delay to apply to the animation start
|
|
///
|
|
/// - Returns: Completable
|
|
func animate(afterDelay delay: TimeInterval = 0) -> Completable {
|
|
return Completable.create { [base] completable in
|
|
base.addCompletion { position in
|
|
guard position == .end else { return }
|
|
completable(.completed)
|
|
}
|
|
|
|
if delay != 0 {
|
|
base.startAnimation(afterDelay: delay)
|
|
} else {
|
|
base.startAnimation()
|
|
}
|
|
|
|
return Disposables.create {
|
|
base.stopAnimation(true)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|