В настоящий момент я переопределяю drawRect
на вид, чтобы иметь возможность закрепить цветной прямоугольник с помощью маски (используя CGContextClipToMask
внутри drawRect
). Иногда я меняю цвет этого обрезанного прямоугольника. В этом случае drawRect
снова вызывается, перерисовывая и обрезая прямоугольник новым цветом. Теперь я не хочу менять цвет сразу, но оживить его. Проблема заключается в том, что анимация не выполняется при переопределении drawRect (drawRect получает только один раз и сразу).как избежать переопределения drawRect при обрезке
Есть ли способ выполнить эту анимацию, возможно, путем подклассификации представления, чтобы я по-прежнему переопределял drawRect
в суперклассе, но анимация каким-то образом выполняется через подкласс, так что drawRect из суперкласса выполняется несколько раз во время анимация?
Или также невозможно переопределить drawRect
и все еще быть в состоянии скопировать этот прямоугольник с помощью маски как-нибудь? drawRect
выглядит примерно так:
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGImageRef maskImage = [[UIImage imageNamed:maskName] CGImage];
CGContextClipToMask(ctx, rect, maskImage);
CGContextSetFillColorWithColor(ctx, self.currentColor);
CGContextFillRect(ctx, rect);
Удивительный, с вашим подходом мне не пришлось переопределять drawRect, чтобы я мог наконец использовать анимацию. Мне не нужно было использовать таймер или рекурсивно выполнять метод анимации, потому что теперь я могу использовать стандартный CoreAnimation. Большое спасибо! Следует отметить, что вам нужно использовать png-изображения или некоторые изображения с четким цветом (черные и белые маски больше не работают, но это не проблема). Также вы должны установить фрейм слоя в рамки вида, который вы хотите скрыть, используя maskLayer.frame = [self bounds]; – JayAr