J'ai plusieurs vues dans une vue principale. Ces points de vue sont tous les uns derrière les autres, de sorte que seul le sommet est actuellement vu. Ce que je voudrais faire est, sur une entrée d'utilisateur particulière, avoir une des vues dans le dos se déplacent plus bas sur l'écran, de sorte qu'il peut être vu en dessous de la vue de dessus. J'ai essayé de le faire en déterminant si les deux vues sont en train de se chevaucher, d'abaisser celle en arrière, si elles se chevauchent encore, de l'abaisser davantage, et ainsi de suite jusqu'à ce qu'elles ne se chevauchent plus et soient toutes deux entièrement visibles. Ensuite, je voudrais que la vue principale soit redimensionnée pour que les deux vues puissent être vues mais je pense que ce serait juste d'utiliser setBounds ou setFrame, je n'y suis pas encore arrivé. Pour le premier problème, je n'ai pas trouvé un moyen de voir littéralement si deux vues se chevauchent, si cela ne peut pas être fait, je pensais peut-être en dessinant sur les limites de la vue et en vérifiant si elles se chevauchent. Je sais comment je peux faire l'un ou l'autre. Je pense que les limites ou le cadre sont nécessaires, mais je ne suis pas vraiment sûr de savoir comment ils sont différents.Cacao se déplaçant chevauchant NSViews
Fondamentalement, je veux vérifier si deux NSViews se chevauchent, s'ils le font, je veux abaisser l'un d'entre eux.
EDIT: Cette partie du problème est à peu près résolue, mais un nouveau problème s'est posé. J'ai trois vues, une vue principale et deux sous-vues. La vue principale n'a rien, elle ne contient que plusieurs sous-vues, tout ce qui est à l'intérieur de la vue principale est ce qui devrait être vu. Les deux sous-vues sont empilées au-dessus de la vue principale, de sorte que la vue la plus en avant est celle visible, celle en arrière est masquée. Lorsque l'utilisateur démarre, la vue à l'arrière devient visible et j'installe une minuterie répétitive avec un sélecteur qui va vérifier si les vues se chevauchent, comme @Vince a dit, si elles le font, il compense celui dans le dos un peu et vérifie à nouveau jusqu'à ce qu'ils ne se chevauchent plus. En utilisant ceci:
- (void)updateViews {
CGRect viewFrame = [view frame]; //view is the frontmost view that will not move
CGRect backroundViewFrame = [backgroundView frame]; //the view in the back
CGRect rectIntersection = CGRectIntersection (viewFrame,
backgroundFrame);
//if the intersect is NOT null, it'll offset down by 2
if (!CGRectIsNull(rectIntersection)) {
CGRect newFrame = CGRectOffset (
rectIntersection,
0, //doesn't move in x
-2 //lowers by 2 in y
);
[backgroundView setFrame:newFrame]; //lowers the view to the new offset rect
} else{
[viewsUpdater invalidate]; //stops the timer when rects no longer intersect
viewsUpdater = nil;
}
Le problème est que quand je baisse la backgroundView, il est seulement visible dans l'espace où il croise la vue de face. Même si j'élargis la vue principale plus bas (ce qui est l'idée, ils vont tous commencer les uns au-dessus des autres avec les mêmes dimensions et quand le backgroundView s'abaisse, la vue principale s'ajustera et affichera les deux). Mais pour l'instant, peu importe la taille de la vue principale, backgroundView n'est visible que dans la zone où elle se croise avec la vue de face. Je pense que ça bouge là où ça doit aller, mais au moment où ça s'arrête, c'est complètement invisible, donc je ne peux pas le dire.
Merci pour l'aide.
désolé, peut-être mal compris le problème tout d'abord, mis à jour! –