Relation entre UIVIew et CALayer concernant l'image d'arrière-plan sur iOS
Essayer de comprendre la relation entre UIView et CALayer. J'ai lu dans la documentation d'Apple, mais il ne décrit pas en détail la relation entre les deux.
- Pourquoi est-il que lorsque j'ajoute l'image d'arrière-plan pour afficher "customViewController.vue", j'ai l'indésirable noir couleur de l'image.
- Et quand j'ajoute l'image d'arrière-plan de la couche "customViewController.vue.couche", la zone noire de l'image est parti (qui est ce que je voulais), mais l'image de fond est retournée à l'envers. Pourquoi est-ce?
- Si je devais ajouter des étiquettes/vues/boutons/etc. pour la vue, la couche de l'image de fond du bloc car CAlayer est soutenu par UIView?
- Lorsque vous définissez la couleur d'arrière-plan d'une UIView t-il automatiquement la couleur d'arrière-plan de la couche?
- (void)viewDidLoad { [super viewDidLoad]; customViewController = [[CustomViewController alloc] init]; customViewController.view.frame = CGRectMake(213, 300, 355, 315); customViewController.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login_background.png"]]; // customViewController.view.layer.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login_background.png"]].CGColor; [self.view addSubview:customViewController.view]; }
Image d'arrière-plan dans la vue:
- (void)viewDidLoad
{
[super viewDidLoad];
customViewController = [[CustomViewController alloc] init];
customViewController.view.frame = CGRectMake(213, 300, 355, 315);
// customViewController.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login_background.png"]];
customViewController.view.layer.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login_background.png"]].CGColor;
[self.view addSubview:customViewController.view];
}
Image d'arrière-plan dans la vue.couche:
OriginalL'auteur s2000coder | 2011-05-06
Vous devez vous connecter pour publier un commentaire.
UIView créé opaque par défaut. Lorsque vous définissez la backgroundColor à un modèle avec de la transparence, elle est de choisir le noir comme couleur d'arrière-plan. Vous pouvez définir
customViewController.view.opaque = NO;
pour permettre l'arrière-plan de la vue derrière le vôtre.Lorsque vous définissez la backgroundColor de la couche à un modèle avec de la transparence, vous êtes en contournant le UIView logique, de sorte que l'opacité de la vue est ignoré; telle est aussi la la UIView de la transformer. CoreGraphics et ses amis utilisent un système de coordonnées où l'axe y pointe vers le bas. UIKit flips ce système de coordonnées. C'est pourquoi l'image apparaît à l'envers.
Si vous ajoutez des étiquettes/vues/boutons/etc. s'affiche correctement sur le dessus de la couche de motif d'arrière-plan.
Lorsque vous définissez le point de vue de la couleur d'arrière-plan, il semble que la couche de couleur est en effet mis en. (Je n'ai pas vu ce document n'importe où).
Essentiellement la UIKit de UIView genre de choses est une interface de haut niveau qui se termine rendus sur des calques.
Espère que cette aide.
MODIFIER 5/7/2011
Vous pouvez obtenir l'image pour montrer le droit chemin par le retournement de la couche du système de coordonnées, MAIS vous ne devriez pas faire cela de vue.couche; UIKit ne vous attendez pas à jouer avec cette couche, de sorte que si votre flip son système de coordonnées tout UIKit dessin sera renversé; vous devez utiliser une sous-couche.
De sorte que votre code devrait ressembler à ceci:
Note: normalement, lorsque vous retournez les coordonnées que vous incluez la hauteur. Pour les couches, vous n'avez pas besoin de le faire. Je n'ai pas creusé à savoir pourquoi il en est ainsi.
Comme vous pouvez le voir, il ya beaucoup plus de code ici et il n'y a pas de réel avantage à le faire de cette façon. Je vous recommande vraiment de vous en tenir à la UIKit approche. J'ai seulement posté le code en réponse à votre curiosité.
Vous êtes les bienvenus!
Curieux, comment faites-vous pour régler l'axe des y si vous avez été à l'utilisation de la couche au lieu de l'afficher?
Hey Blu, je viens de mettre à jour la réponse pour vous montrer une façon de le faire; il y a quelques. Comme vous pouvez le voir le UIKit approche est plus simple.
Merci idz, je voulais seulement savoir à des fins d'apprentissage. Je n'ai pas l'intention de le faire à l'aide de la couche.
OriginalL'auteur idz