- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当用户点击表格 View 的编辑按钮时,您如何为表格 View 单元格中的颜色变化设置动画?
点击编辑按钮时,Apple 的动画会将所有单元格的内容向右移动,以在每个单元格中显示删除或插入按钮。我想添加我自己的动画,这些动画与 Apple 的动画同时出现。我已经设法为单元格布局设置了动画,但没有更改颜色。
这就是我正在做的:
override func willTransition(to state: UITableViewCellStateMask) {
super.willTransition(to: state)
let willEdit = state.contains(.showingEditControlMask)
toDateDaysLayoutConstraint.constant = willEdit ? 5.0 : 25.0
daysNightsLayoutConstraint.constant = willEdit ? 5.0 : 10.0
toDateTextView.textColor = willEdit ? UIColor.red : UIColor.darkText
daysLabel.backgroundColor = willEdit ? UIColor.cyan : UIColor.clear
}
需要明确的是,上面的 layoutConstraint 会正确地改变动画,但是颜色会在没有动画的情况下瞬间改变。
我还尝试使用 UIView block 动画为颜色设置动画,如下所示:
UIView.animate(withDuration: 5.0) {
self.toDateTextView.textColor = willEdit ? UIColor.red : UIColor.darkText
self.daysLabel.backgroundColor = willEdit ? UIColor.cyan : UIColor.clear
}
但是,我永远无法获得动画的颜色。我试过将上面的代码放在willTransition(to state:)
、setEditing(_ editing: animated:)
,甚至是layoutSubviews()
.我也在表 Controller 方法中尝试过。但是,没有任何效果。
更新
到现在为止,我还尝试过将所有内容都包装在 CATransaction.begin()
和 CATransaction.commit()
之间,也只使用图层动画,甚至将在调用 super
之后,在 didTransition
中 commit
。什么都不管用。
我想知道,是否可以与 Apple 的动画同时制作任何不是布局动画的动画?
最佳答案
据我了解,您只能为 UIView 的“可动画化”属性设置动画(参见 this list )。 textColor
不在其中。我已经在适当的位置使用了 UIView.transition(with:duration:options:animations)
并且文本颜色正确地“动画化”了:
override func willTransition(to state: UITableViewCellStateMask) {
super.willTransition(to: state)
UIView.transition(with: textLabel!, duration: 5.0, options: .transitionCrossDissolve, animations: {
self.textLabel?.textColor = state.rawValue == 1 ? UIColor.red : UIColor.black
})
}
编辑 1
根据您的评论,我已成功重现该问题。我通过覆盖 didTransition(to:)
而不是 willTransition(to:)
为 UILabel
修复了它。所以我们首先等待 View 调整大小(因为出现删除按钮)然后我们制作动画。但是,这对于 UITextView
效果不是很好,除非您确保它具有固定大小。
class TableViewCell: UITableViewCell {
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var label: UILabel!
override func didTransition(to state: UITableViewCellStateMask) {
super.didTransition(to: state)
UIView.transition(with: textView, duration: 3, options: .transitionCrossDissolve, animations: {
self.textView.textColor = state.rawValue == 1 ? UIColor.red : UIColor.black
})
UIView.transition(with: label, duration: 3, options: .transitionCrossDissolve, animations: {
self.label.backgroundColor = state.rawValue == 1 ? UIColor.red : UIColor.white
})
}
}
编辑 2
如果您需要调整 TextView 的大小,则异步执行动画:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
UIView.transition(with: self.textView, duration: 3, options: .transitionCrossDissolve, animations: {
self.textView.textColor = state.rawValue == 1 ? UIColor.red : UIColor.black
})
}
顺便说一下,我也尝试过子类化 UITextView
并覆盖 layoutSubviews
但它没有工作...
关于ios - 如何在编辑时为 UITableViewCell 设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46007997/
嘿伙计们,我对java很陌生,我想知道是否有人可以解释为什么我在数组的开头得到一个随机空值,它是[null,r,b,o,e,r, t] 不知道为什么这样做!任何摆脱它的帮助都会很棒! public s
当我执行程序时 #include #include #include double exponential(double u); double exponential(double u) {
这个问题已经有答案了: 奥 git _a (17 个回答) 已关闭 7 年前。 我已经从 What does "Fatal error: Unexpectedly found nil while un
我正在开发一个债务跟踪应用程序,并且需要一个进度条,当当前债务下降时,进度会上升。我能想到的唯一方法是捏造周围的数字,使进度条 MAX 设置为 0,然后将起始债务更改为负数,如下所示 Progress
我知道当使用 ARC 并且你有一个 NSString 属性时,你可以像使用 MRC 一样执行 @property(nonatomic, copy)。但我想知道,在我将我的项目转换为 ARC 之后,我的
在 Xcode 6 Beta 2 上,我构建了一个带有 2 个 View Controller 的应用程序。 可以看到“Button”的 Action 是打开第二个ViewController。 但是
我正在使用 CreateFileA,我第一次调用它时,它按预期工作。但是当我第二次调用它时,它返回句柄 INVALID_HANDLE_VALUE。可能是什么问题呢?仅供引用,每次我需要检查我的 USB
我有一个被映射到生成器中的增强函数;然而,出于某种原因,tfa.image.rotate函数导致错误。 def customGenerator(input_file_paths, dims, data
我有查询并且有效 select *, id, from_unixtime(start_timestamp) from log limit 1; 这也很好用: select * from log lim
我有一个 FutureBuilder在我的具有常规结构的应用程序中: FutureBuilder( future: futureData(), builder: (context, snaps
所以我最近才接触到C++的SDL2,我做了这个非常简单的代码: int main(int argc, char** argv) { SDL_Event *event; bool done = fals
我正在打包一个非常简单的 redmine 插件 rpm,以供内部使用,但我遇到了“Package has no %description:”错误。 .spec 有一个描述,但我在 inet 上找不到任
call main() sub main() Dim scmd Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vb
我正在使用以下代码在 Java 应用程序中使用 Git。我有一个有效的 key (一直使用它),并且这个特定的代码之前使用相同的 key 和 git 存储库对我有用,但现在我得到以下异常: inval
我有一个 Java 小程序,可以查询 Oracle 数据库中的数据。当从 IDE 内部运行时,它运行得很好。但是,当我将它作为嵌入网页中的小程序运行时,我在类加载器中收到“访问被拒绝”错误,并且我根本
我正在将一个 HTML 文件从 MainBundle 加载到 UIWebview 中,并想传入一个查询字符串,因为 HTML 文件检查 GET 参数 (?device=1) 以进行一些额外的计算。我还
我有一个包含多个项目的解决方案。每个项目都有自己的 nuspec 文件,其中一些项目相互引用 当我通过调用创建一个新包时 nuget pack MyLibrary.csproj -IncludeRef
我有一个测试文件和一个主模块文件,其中有一个我正在测试的函数。在测试文件的末尾,我有 unittest.main() 来运行单元测试。但是,当我运行测试文件时,控制台显示“未找到测试”,即使我的文件中
我在构建 docker 镜像时使用 dotnet:2.1-sdk 作为包。RUN dotnet restore 命令失败并出现以下错误: **error : Unable to load the se
这是一个简单的程序,只会执行 3 个子进程。每个都将创建一个锁,读取一个文本文件,并取消该锁的链接。如果正确执行,子进程将退出,并将其进程 ID 转换为 8 位。如果无法创建/取消链接锁,程序将尝试
我是一名优秀的程序员,十分优秀!