相关疑难解决方法(0)

当动画中的块调用停止时,填充颜色动画闪烁

我无法弄清楚动画块完成后动画从fromValue到toValue闪烁的原因.我知道在完成动画后,您必须将CALayer的值设置为动画的结束状态,以使其看起来保持一致.然而,无论我在哪种顺序调用这些方法,我都会不断获得闪烁的结果.我正在做的是绘制一个带有biezer路径的复选标记,然后一旦strokeEnd动画完成,我通过动画fillColor属性填写复选标记.当用户选择与复选标记相关联的tableviewcell的行时,填充复选标记功能和重置复选标记功能都被触发.哦,如果这有所不同,我正在使用AutoLayout.

所以我真的想知道一些事情1)一旦显示表视图单元格,我调用公共函数shoudSetCheckmarkToCheckedState,它将boolean self.userSelectedCheckmark设置为函数中传递的参数isChecked.从那里我调用[self setNeedsLayout],它触发layoutSubviews并调用shouldDrawCheckmark ...函数.我这样做的原因是因为如果我没有第一次绘制单元格就没有框架设置,所以我的绘图看起来很乱.因此,每当我更改userSelectedCheckmark属性时,我应该调用setNeedsLayout还是有更好的方法.

2)为什么动画完成后复选标记会闪烁.我想我知道为什么,因为当动画完成时,图层属性被重置为图层开始动画时所处的状态.那么我该如何解决这个问题呢?我会触发一个计时器,在动画结束前一毫秒更改填充颜色,但感觉不对.

继续代码btw

typedef void (^animationCompletionBlock)(void);
#define kAnimationCompletionBlock @"animationCompletionBlock"

#import "CheckmarkView.h"
#import "UIColor+HexString.h"

@interface CheckmarkView()
@property (nonatomic,strong) CAShapeLayer *checkmarkLayer;
@property (nonatomic,assign) BOOL userSelectedCheckmark;
- (void)shouldDrawCheckmarkToLayerWithAnimation:(BOOL)animateCheckmark;
@end

@implementation CheckmarkView

#pragma mark - Lifecycle
/**********************/
- (id)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        self.translatesAutoresizingMaskIntoConstraints = FALSE;
        self.layer.cornerRadius = 5.0;
        [self setClipsToBounds:TRUE];
    }
    return self;
}
- (void)layoutSubviews{
   [self shouldDrawCheckmarkToLayerWithAnimation:self.userSelectedCheckmark];
}

#pragma mark - Public Methods
/***************************/
- (void)shouldSetCheckmarkToCheckedState:(BOOL)isChecked{
    self.userSelectedCheckmark = isChecked;
    [self setNeedsLayout];
}

#pragma mark - …
Run Code Online (Sandbox Code Playgroud)

core-animation core-graphics calayer ios uibezierpath

3
推荐指数
1
解决办法
845
查看次数