- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个绑定(bind)到 UILabel 文本的 UIStepper 值:
unitsStepper.rx.value.asObservable()
.map { Int($0).description }
.bind(to: stepperCountLabel.rx.text)
.disposed(by: rx.disposeBag)
而且我想在标签每次更改时都设置动画,有比这个更好的方法吗?
unitsStepper.rx.value.asObservable()
.map { Int($0).description }.subscribe(onNext: { [weak self] value in
guard let strongSelf = self else { return }
UIView.animate(withDuration: 0.4, animations: {
strongSelf.stepperCountLabel.text = value
strongSelf.stepperCountLabel.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
}, completion: { completed in
strongSelf.stepperCountLabel.transform = CGAffineTransform.identity
})
}).disposed(by: rx.disposeBag)
最佳答案
就我个人而言,我不认为这有什么不妥。如果您希望它更具可读性、更少嵌套,那么您可以将其拆分开来。您的需求会有所不同,并且您不想用非常具体的东西污染一般的东西,但看起来您有一些重复的东西,一种脉动。
我需要类似的东西来进行表单验证,并写下了这个(虽然你的实际动画更简单,我想我从多部分关键帧动画开始但将其减少到只是来回)
extension UIView {
func shake(totalDuration: TimeInterval, totalCycles: Int = 1) {
let animationDuration = totalDuration / Double(totalCycles)
let wiggle = CAKeyframeAnimation(keyPath: "transform.rotation.z")
wiggle.values = [0.0, -0.04, 0.04, 0.0]
wiggle.duration = animationDuration
wiggle.repeatCount = Float(totalCycles)
layer.add(wiggle, forKey: "wiggle")
let vertical = CAKeyframeAnimation(keyPath: "transform.translation.y")
vertical.values = [0.0, -2.0, 2.0, 0]
vertical.duration = animationDuration
vertical.repeatCount = Float(totalCycles)
layer.add(vertical, forKey: "vertical")
let horizontal = CAKeyframeAnimation(keyPath: "transform.translation.x")
horizontal.values = [0.0, 2.0, -2.0, 0]
horizontal.duration = animationDuration
horizontal.repeatCount = Float(totalCycles)
layer.add(horizontal, forKey: "horizontal")
}
func pulse(totalDuration: TimeInterval, ratio: CGFloat = 1.2) {
UIView.animateKeyframes(
withDuration: totalDuration,
delay: 0,
options: [],
animations: {
UIView.addKeyframe(
withRelativeStartTime: 0,
relativeDuration: 0.5,
animations: { [unowned self] in
self.transform = .init(scaleX: ratio, y: ratio)
})
UIView.addKeyframe(
withRelativeStartTime: 0.5,
relativeDuration: 0.5,
animations: { [unowned self] in
self.transform = .identity
})
}, completion: { completed in })
}
}
然后我编写了一个带有条件和 Action 闭包的简单验证器结构,并在表单更改/验证时快速浏览它们的列表。
但是回到你的问题,你的动画本身是最小的,如果它是一次性的,你可以把它放在封闭类中,如果它是通用的,你可以将它作为扩展添加,但是作为一个-关闭,它仍然很好(如果我正在阅读代码)
关于swift - RxSwift 使用 RxCocoa 与动画绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50952562/
我尝试使用 RxSwift 作为依赖项创建一个名为 MyLib 的库,它使用 cocoapod 命令 pod lib create。但是,以下代码不起作用。 import UIKit import M
我是 RxSwift 的新手。很新。通常要在没有 Rx 的情况下链接你,你将下一个函数放在一个完成闭包中。我的同事告诉我改用 flatmap 或我们的 concatmap 版本,但从未给我一个例子。有
我创建了一个使用 RxSwift、RxCocoa 和其他第三方框架的自定义框架。自定义框架正确编译,但当我添加到应用程序时,它崩溃并出现以下错误: dyld: Library not loaded:
我会尽可能简短:我们启动了完整的 RxSwift 应用程序,但我们的协调员开始不知所措,难以维护和扩展,因此我们正在重新设计他们以不使用 RxSwift,现在我们不知道如何使用它们以及保存它们的位置。
我正在使用 RxSwift 和 MVVM 实现一个简单的地址 UITableView。我像这样在我的 View Controller 中创建了一个绑定(bind)。 viewModel.address
ReactiveX.io documentation使用 AnonymousDisposable,它在 RxSwift 2.x 中,但在 RxSwift 3.0 中是一个未解析的标识符。我应该改用什么
我有一个应用程序使用 MVP与 Coordinator图案。 当子协调器发送事件时,我希望我的 AppCoordinator递归调用一个方法,根据一些 SessionState 选择下一个协调器. 该
上下文:我的团队正在开始一个新的中型 Swift 项目(大约 20 MM),我正在考虑在 RxSwift 中开发它.我的一位经理怀疑,他曾经在 上的调试方面有过不好的经历。响应式(Reactive)编
嘿,我在 HackingWithSwift 教程中学到了如何使用 Combine 发出链接的网络请求(请参阅下面的代码)。现在我将使用 RXSwift 构建相同的逻辑,但我不知道如何像在 Combin
我正在尝试进行几个 API 调用并填充领域数据库。 一切正常。但是,当我尝试运行 performSegue()在 subscribe()方法引发异常,通知我不能在后台线程上执行此操作,这是完全合理的。
假设我有 Int 数组: var items = [1, 2, 3, 4, 5] 以及一个接受 Int 参数并基于它发送网络请求的函数: func sendRequest(argument: Int
我有一个文本字段,它有 2 个验证规则:最小数量的字符和字母数字字符。 我希望能够向用户展示他在错误标签中做错了什么,但问题是,如果我将文本字段绑定(bind)到两个规则,它可能会令人毛骨悚然,因为一
我试图在选择表行时在后台执行复杂的计算,但它卡住了 UI。请查看我的代码并告诉我可能有什么问题。 tableView.rx .modelSelected(Sring.self) .fl
我正在尝试构建一个计时器,该计时器从15秒开始,递减计数到0。 事情是,我想根据事件将计时器更新2秒。 到目前为止,这是我尝试做的事情: struct ViewModel { struct I
我正在使用该领域作为后端。使用RxSwift,我可以在DB表中观察到某些列(它跟踪未决状态)。得到事件后,我切换到另一个Serial计划表,以将列的值设置为flatMap块中的Progress状态(返
我对响应式(Reactive)编程很陌生,所以我仍然很难理解它是如何工作的。 我正在尝试做的事情:当用户点击 signUpButton (signUpTrigger) 时,会触发多个 observab
以下是与问题39类似的示例:http://reactivex.io/learnrx/ 我正在尝试将方法调用search(query: String)转换为这些调用的序列。 他们通过创建一个Variab
我有两个 Single 值,它们包含同一对象的数组。我想合并它们并应用 map 并将它们作为单个返回。可能吗? 所以我有这个: func fetchTripList(type: TripType) -
使用 RxSwift,假设我有一个包含整数可观察值的 A 类 class A: { let count: Observable } 以及 A 的可观察对象集合 let data: Observ
我想转换一个我已经完全接收的 ViewModel。该应用程序计算算术表达式。 ViewModel 有两个字符串,一个带有“逻辑”符号,将发送到表达式求值器以获取结果,另一个带有其他符号的“演示”字符串
我是一名优秀的程序员,十分优秀!