Ho pensato che da un certo punto di OS X, e sempre vero per iOS, quel contenuto può apparire al di fuori dei limiti della vista? (Per UIView) Ma se creo una nuova Visualizzazione singola applicazione, e creato una classe MyView che le sottoclassi UIView, e attuare le sue drawRect:Su iOS, drawRect non può disegnare al di fuori dei limiti della vista?
- (void)drawRect:(CGRect)rect
{
// Drawing code
UIBezierPath *path = [UIBezierPath bezierPathWithRect:
CGRectMake(-20, -20, 600, 600)];
[[UIColor greenColor] set];
[path fill];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]);
CGContextFillRect(context, CGRectMake(-20, -20, 600, 600));
}
Io uso sia UI e CG per disegnare un rettangolo ciascuna, proprio in caso uno lavora e l'altro no. E la vista viene aggiunto in viewDidAppear
:
- (void)viewDidAppear:(BOOL)animated {
MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(20, 20, 260, 260)];
[self.view addSubview:myView];
}
Ma non importa cosa, la casella colorata non andrà oltre la regione (20, 20, 260, 260)
. È vero che solo i CALayer possono essere liberamente aggiunti e visualizzati al di fuori dei limiti di una vista? Può essere perché il contesto grafico è limitato a questo (20, 20, 260, 260)
per cominciare? In tal caso, c'è un modo per rendere il contenuto di drawRect
visualizzato al di fuori del limite della vista, in tutte e quattro le direzioni in alto, in basso, a sinistra, a destra?
Posso chiederlo, perché vuoi disegnare all'esterno del rettangolo visibile, poiché non sarà visibile? Se hai intenzione di renderlo visibile in seguito, dovresti usare un CALayer come hai menzionato correttamente. – Lefteris
un motivo è, sto pensando di implementare un PopoutScrollView che ha angoli arrotondati, o anche "nuvola come bordi". Ho scoperto che posso creare sottoclassi UIView e avere un UIScrollView come proprietà, in modo che la scrollview sia una sottoview della vista, e in realtà devo sovrascrivere 'addSubview' per aggiungere a' self.scrollView'. Questo perché non posso semplicemente disegnare i bordi su una scrollView, altrimenti scorrono. Questo può essere complicato, e ho pensato, perché non solo sottoclassi UIScrollView, e in drawRect, disegnare al di fuori dei limiti? Quindi non devo sovrascrivere tanti metodi. –
Anche se non ho provato questo, ma non vedo un motivo per questo non funziona, aggiungendo angoli arrotondati alla scrollview, attraverso la proprietà scrollview.layer.cornerRadius dovrebbe farlo per voi. Inoltre, se hai intenzione di modificare una scrollView, dovresti creare una sottoclasse della scrollview e il suo metodo drawRect, piuttosto che una UIView – Lefteris