Ответ 1
-
UIView по умолчанию создается непрозрачным. Когда вы устанавливаете backgroundColor на шаблон с прозрачностью, он выбирает черный как цвет фона. Вы можете установить
customViewController.view.opaque = NO;
, чтобы можно было просматривать фон вашего представления за вашим. -
Когда вы устанавливаете backgroundColor слоя на шаблон с прозрачностью, вы обходите логику UIView, поэтому непрозрачность представления игнорируется; так и преобразование UIView. CoreGraphics и друзья используют систему координат, где положительная ось y направлена вверх. UIKit переворачивает эту систему координат. Вот почему изображение появляется вверх ногами.
-
Если вы добавляете метки/представления/кнопки/и т.д. будет отображаться правильно поверх фонового рисунка слоя.
-
Когда вы устанавливаете цвет фона вида, он выглядит так, как будто цвет фона слоя действительно установлен. (Я не видел этого документально нигде).
По сути, UIKit UIView - это интерфейс высокого уровня, который заканчивается на слоях.
Надеюсь, что это поможет.
РЕДАКТИРОВАТЬ 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. Я только отправил код в ответ на ваше любопытство.