Свойства теней CALayer, такие как shadowOffset, shadowRadius, shadowColor, недоступны в версиях iPhone OS ниже 3.2, и мне интересно, как можно имитировать эту функциональность для использования с 3.1 и ниже.
Я хочу использовать это, чтобы иметь возможность добавлять тени в UIViews чистым способом, чтобы тени каким-то образом рисовались на уровне слоя, а не путем рисования в методе -(void)drawRect:(CGRect)rect
представления, который требует уменьшения фактического размера. рамка для размещения тени. (Этот сокращающий подход был предложен в других вопросах, связанных с тенями UIView, которые я нашел здесь на SO).
Я думал, что многоуровневый подход будет чище. Например, я попытался создать подкласс CALayer, к которому я добавил отдельный теневой слой в качестве подслоя, но затем он был бы нарисован поверх всего, что было нарисовано в drawRect: метод UIView, у которого основной слой был задним слоем.
Я также пытался реализовать подкласс CALayer
drawInContext: что-то вроде этого,
- (void)drawInContext:(CGContextRef)ctx {
// code to draw shadow for a frame the size of the layer's frame
[super drawInContext:ctx];
}
Но затем тень все еще обрезается до текущего ограничивающего прямоугольника контекста, который, по-видимому, является собственным кадром слоев.
У меня также была некоторая идея перенаправить рисунок основного слоя на подслой, который был бы помещен над другим подслоем, на котором была нарисована тень. Тогда я, вероятно, избавлюсь от отсечения, и тень будет дальше всего. Но я не мог по-настоящему обернуться, как бы я это сделал, и на самом деле это не похоже на чистый подход.
Есть идеи, как это сделать? Просто чтобы прояснить, чем мой вопрос, связанный с тенью на UIView, отличается от других, которые я нашел здесь на SO; Я не хочу уменьшать фактическую рамку рисования UIView, чтобы приспособить для тени. Я хочу, чтобы он как-то находился на отдельном слое на заднем плане, без обрезки.