Как включить неявную анимацию в UIView при выполнении пользовательского рисования? - PullRequest
1 голос
/ 26 января 2012

Я выполняю собственное рисование в своем подклассе UIView, используя:

- (void)drawRect:(CGRect)rect;

Как включить неявную анимацию при изменении рисунка?

1 Ответ

0 голосов
/ 28 января 2012

Так как других предложений не было, я выбрал метод делегирования слоя.Возможно, это единственный вариант.

Итак, в MyView я создал новое свойство CALayer:

-(CALayer*)stylesLayer
{

    if (_stylesLayer == nil) {

        CALayer *aLayer = [CALayer layer];
        aLayer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);

        if ([self respondsToSelector:@selector(setContentScaleFactor:)])
        {
            aLayer.contentsScale = self.contentScaleFactor;
        }


        _stylesLayer = aLayer;
        [_stylesLayer retain];
        [self.layer addSublayer:aLayer];
        [aLayer release];
    }

    return _stylesLayer;
}

И в MyViewController я реализовал метод делегата, который выполняет рисование:

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{

    // custom drawing code here

}

Теперь, когда изменяется определенное свойство, я обновляю слой из MyViewController, который неявно выполняет анимацию перекрестного затухания.

-(void)setStyles:(NSArray *)styles
{

    [styles retain];
    [_styles release];
    _styles = nil;
    _styles = styles;

    [self.myView.stylesLayer setNeedsDisplay];

}
...