Подкласс UIView с CAShapeLayer в качестве маски не корректно анимирует - PullRequest
0 голосов
/ 19 февраля 2012

Я добавил закругленные углы к своему подклассу UIView, добавив маску слоя.Ниже приведен код Montouch, но он должен быть достаточно простым, чтобы получить значение также в ObjC:

// Add a layer that holds the rounded corners.
UIBezierPath oMaskPath = UIBezierPath.FromRoundedRect (this.Bounds, this.eRoundedCorners, new SizeF (this.fCornerRadius, this.fCornerRadius));

private void UpdateMask()
{           
if(this.Layer.Mask == null)
{
    CAShapeLayer oMaskLayer = new CAShapeLayer ();
    oMaskLayer.Frame = this.Bounds;

    // Set the newly created shape layer as the mask for the image view's layer
    this.Layer.Mask = oMaskLayer;
}
((CAShapeLayer)this.Layer.Mask).Path = oMaskPath.CGPath;
}

Я перегружен свойством Frame.При настройке кадра настраивается маска, чтобы сохранить закругленные углы в форме.

Однако, если я анимирую изменение размера кадра, вместо маски сразу устанавливается целевое значение анимации.Есть ли способ заставить мой вид определять, что является частью анимации, и корректно анимировать маску?

1 Ответ

1 голос
/ 19 февраля 2012

Вот как CoreAnimation работает с явными анимациями.

С помощью явных анимаций вы фактически никогда не изменяете значения ваших исходных объектов, вы просто анимируете объекты на уровне представления.Поэтому вам нужно убедиться, что ваш объект был настроен до того, как вы запустите анимацию со значением, которое вы хотите получить в конце.

Полное объяснение того, как решить этот класс проблем, описано в "Основы анимации "на онлайн-видео WWDC 2011.Ищите сессию 421

...