UITableViewCell 内的 UIImageView 旋转动画
Posted
技术标签:
【中文标题】UITableViewCell 内的 UIImageView 旋转动画【英文标题】:UIImageView Rotate Animation inside UITableViewCell 【发布时间】:2017-08-16 15:31:47 【问题描述】:我正在尝试在选择 row 0
时旋转 UIImage 视图。在选择该部分需要重新加载以添加另外两个单元格。这是动画无法正常工作的地方。 imageview 只是转换到新位置而不执行动画。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if indexPath.row == 0
print(cell)
if displayCell
UIView.animate(withDuration:0.3, animations:
cell.rotateButtonImageView.transform = CGAffineTransform(rotationAngle: CGFloat(0))
)
if indexPath.row != 0
swap(&indexArr[indexPath.row], &indexArr[0])
print(indexArr)
else
UIView.animate(withDuration: 0.3, animations:
cell.rotateButtonImageView.transform = CGAffineTransform(rotationAngle: (180.0 * .pi) / 180.0)
)
displayCell = !displayCell
tableView.reloadSections(IndexSet(integersIn: 0...0), with: .none)
另外,第 0 行的特定单元格的内容也需要更新。 这是一个sample 项目:
【问题讨论】:
究竟是什么原因无法正常工作? 我已经更新了问题 【参考方案1】:动画结束后,您需要重新加载 UITableView
部分
你还需要修改你的 cellForRow 方法
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell") as! CustomTableViewCell
switch indexPath.section
case 0:
cell.rotateButtonImageView.isHidden = indexPath.row != 0 || indexArr.count <= 2
if(indexPath.row == 0)
if displayCell
cell.rotateButtonImageView.transform = CGAffineTransform(rotationAngle: (180.0 * .pi) / 180.0)
else
cell.rotateButtonImageView.transform = .identity
break
default :
cell.rotateButtonImageView.isHidden = true
break
cell.indexLabel.text = indexArr[indexPath.row].0
return cell
将此代码用于您的 didSelectRowAt
方法
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if indexPath.row == 0
print(cell)
if displayCell
cell.rotateButtonImageView.transform = CGAffineTransform(rotationAngle: (180.0 * .pi) / 180.0)
UIView.animate(withDuration: 0.3, animations:
cell.rotateButtonImageView.transform = CGAffineTransform(rotationAngle: CGFloat(0))
, completion: (finished) in
tableView.reloadSections(IndexSet(integersIn: 0...0), with: .automatic)
)
if indexPath.row != 0
swap(&indexArr[indexPath.row], &indexArr[0])
print(indexArr)
else
cell.rotateButtonImageView.transform = CGAffineTransform(rotationAngle: CGFloat(0))
UIView.animate(withDuration: 0.3, animations:
cell.rotateButtonImageView.transform = CGAffineTransform(rotationAngle: (180.0 * .pi) / 180.0)
, completion: (finished) in
tableView.reloadSections(IndexSet(integersIn: 0...0), with: .automatic)
)
displayCell = !displayCell
希望对你有帮助
【讨论】:
感谢您的意见,但我试过了,但没有帮助 @SiddharthanAsokan 我的答案再次更新,我将发布带有结果的 gif以上是关于UITableViewCell 内的 UIImageView 旋转动画的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 内的 UIImageView
UITableViewCell 内的多个堆栈视图内的多行标签
UITableViewCell 内的 UIView 上的 UIGestureRecognizer
UITableViewCell 内的 UIStackView