UIV Вид как созданный непрозрачный по умолчанию. Когда вы устанавливаете backgroundColor для шаблона с прозрачностью, он выбирает черный цвет фона. Вы можете установить customViewController.view.opaque = NO;
, чтобы позволить фону вида позади вас просвечивать.
Когда вы устанавливаете backgroundColor слоя в шаблон с прозрачностью, вы обходите логику UIView, поэтому непрозрачность вида игнорируется; Так же как и преобразование UIView. CoreGraphics и друзья используют систему координат, где положительная ось Y указывает вверх. UIKit переворачивает эту систему координат. Вот почему изображение появляется с ног на голову.
Если вы добавите метки / виды / кнопки / и т. Д. будет правильно отображаться поверх фонового рисунка слоя.
Когда вы устанавливаете цвет фона представления, это выглядит так, как будто цвет фона слоя действительно установлен. (Я нигде не видел этого документально).
По сути, UIKit - это высокоуровневый интерфейс, который в итоге рендерится на слои.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ 5/7/2011
Вы можете заставить изображение показывать правильный путь, переворачивая систему координат слоя, НО вам не следует делать это для view.layer; UIKit не ожидает, что вы будете связываться с этим слоем, поэтому, если вы перевернете его систему координат, любой рисунок UIKit будет перевернут; вам нужно использовать подслой.
Итак, ваш код будет выглядеть так:
- (void)viewDidLoad
{
[super viewDidLoad];
customViewController = [[CustomViewController alloc] init];
customViewController.view.frame = CGRectMake(213, 300, 355, 315);
CALayer* l = [CALayer layer];
l.frame = customViewController.bounds;
CGAffineTransform t = CGAffineTransformMake(1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f);
l.affineTransform = t;
l.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage
imageNamed:@"login_background.png"]].CGColor;
[customViewController.view.layer addSublayer:l];
[self.view addSubview:customViewController.view];
}
Примечание: обычно, когда вы переворачиваете координаты, вы включаете высоту. Для слоев вам не нужно это делать. Я не понял, почему это так.
Как вы можете видеть, здесь задействовано гораздо больше кода, и нет никакой реальной выгоды делать это таким образом. Я действительно рекомендую вам придерживаться подхода UIKit. Я только опубликовал код в ответ на ваше любопытство.