前言
一个cell可能有好几种状态,比方说选中状态与未选中状态,以及失效状态等等状态,我们将这些不同的情形抽象成一个个状态机,用状态机切换逻辑来设计复杂的动画效果,达到简化设计的目的,大大增加程序可维护性.
* 大家需要注意一点,cell因为是可以复用的控件,因为存在复用,所以里面存在较为恶心的复用逻辑,设计动画接口时是需要注意这些小细节的.(亲手写过的人一定会深有体会)
效果
源码
https://github.com/YouXianMing/CellStateAnimation
// // CellStateAnimationProtocol.h // CellState // // Created by YouXianMing on 15/9/2. // Copyright (c) 2015年 ZiPeiYi. All rights reserved. // #import <Foundation/Foundation.h> /** cell状态 */ typedef enum : NSUInteger { SelectedCellState = 0x20, // 选中状态 UnselectedCellState, // 未选中状态 } ECellState; @protocol CellStateAnimationProtocol <NSObject> @required /** * 切换到指定的状态 * * @param state 指定的状态 * @param animated 是否需要执行切换的动画 */ - (void)changeToState:(ECellState)state animated:(BOOL)animated; @end
分析
使用协议是为了统一接口,统一cell的行为.因为,每个末端的cell都是不可复用的,写出高复用的代码并没有太大价值.
用model记录状态值
如何设置动画
时间: 2024-11-10 10:53:39