Auf iOS, drawRect nicht zeichnen kann außerhalb der Sicht die Grenzen?

Ich dachte, ab einem gewissen Punkt auf für OS X, und immer gilt für iOS, die Inhalte können angezeigt werden, außerhalb der Sicht die Grenzen? (für UIView), Aber wenn ich eine neue Single View app und erstellt eine MyView Klasse UIView-Unterklassen, und für die Umsetzung Ihrer drawRect:

- (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));
}

Verwende ich sowohl die Benutzeroberfläche und CG ein Rechteck jede, für den Fall das eine funktioniert und der andere nicht. Und die Aussicht ist Hinzugefügt viewDidAppear:

- (void)viewDidAppear:(BOOL)animated {
    MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(20, 20, 260, 260)];
    [self.view addSubview:myView];
}

Aber egal was, das farbige Feld wird nicht gehen über die (20, 20, 260, 260) region. Ist es wahr, dass nur die CALayers können frei Hinzugefügt und erscheinen außerhalb der Sicht Grenzen? Kann es sein, weil der Grafik-Kontext beschränkt sich auf diese (20, 20, 260, 260) zu beginnen? Wenn dem so ist, ist es eine Möglichkeit zu drawRect Inhalte erscheinen außerhalb der view gebunden, die in allen vier oben, unten, Links, rechts, Richtungen?

  • Darf ich Fragen, warum Sie zeichnen möchten, die außerhalb des sichtbaren rect, da Sie nicht sichtbar sein? Wenn Sie planen, um es später sichtbar sind, sollten Sie einen CALayer wie Sie richtig erwähnt.
  • ein Grund dafür ist, ich bin am überlegen, die die Durchführung eines PopoutScrollView, der hat Runde Ecken, oder auch "cloud-wie Kanten". Ich fand, dass ich UIView-Unterklasse, und haben eine UIScrollView als Eigenschaft, so dass der scrollview ist eine Untersicht der Sicht, und ich habe eigentlich zu überschreiben addSubview hinzufügen self.scrollView. Das ist, weil ich kann nicht, ziehen Sie einfach den Rahmen auf eine scrollView, sonst werden diese scroll entfernt. Dies kann kompliziert werden, und ich dachte, warum nicht einfach eine Unterklasse UIScrollView, und in drawRect, ziehen außerhalb der Grenzen? Dann weiß ich nicht überschreiben, so viele Methoden.
  • Obwohl ich noch nicht ausprobiert, aber ich sehe keinen Grund für diese nicht arbeiten, das hinzufügen von abgerundeten Ecken bis hin zu den scrollview, durch den scrollview.Schicht.cornerRadius-Eigenschaft sollte dies für Sie einfach. Auch wenn Sie planen, ändern, scrollView, sollten Sie eine Unterklasse der scrollview und es ist drawRect-Methode, sondern als eine UIView
  • also du meinst nicht mit drawRect zeichnen Sie die Ebene mit den Runden Ecken? Ist es nicht wahr, dass, wenn ich eine Unterklasse UIScrollView und Runde Ecken mit drawRect, dann die Grenze wird "scrollen" wie jede beliebige andere Inhalte? Oder es sei denn [aScrollView addSubview: v] ist tatsächlich hinzufügen, um eine weitere UIView-Objekt ist eine Eigenschaft von UIScrollView, so UIScrollView ist drawRect eigentlich nicht zeichnen, dass in Untersicht und so ist es kein problem?
  • (was ich meine ist, nicht mit drawRect zeichnen Sie die Ebene, aber wahrscheinlich in initWithFrame erstellen Sie eine bitmap-Kontext, zeichnen Sie einen guten "background-border-image", bekommen die cgImage, und Sie als eine Schicht, um die view-Schicht? Übrigens habe ich versucht Unterklassen UIScrollView und verwenden drawRect zu ziehen, die Grenzen und Sie werden nicht gescrollt werden entfernt)
  • Warum sollte die gescrollt werden entfernt? Sie nicht zeichnen Sie in den contentView der scrollView, aber der scrollView es sich von selbst.
  • und ist es wahr, dass, wenn [aScrollView addSubview: v], dann v ist tatsächlich Hinzugefügt, um das contentView? Ich wusste nicht, was geht unter dem UIScrollView-Schnittstelle
  • Richtig. Es ist eine Untersicht, und Sie können dann festlegen, dass der scrollView die Größe des Inhalts über die setContentSize Methode.
  • Ich bin mit einem ähnlichen problem versucht, einen Pfad zeichnen, um eine UIView durch überschreiben drawRect und einen Pfad zeichnen (für die Hervorhebung ein UIImage durch Zeichnung einen farbigen Rahmen). Aber mein Weg ist clipping an der Innenseite des Bildes. Sicherlich können wir ändern, ist die clipping-Pfad anstatt das hinzufügen einer anderen, größeren Schicht Bild über die UIView, die ich hervorheben möchten. Ich habe versucht, Variationen des masksToBounds und clipsToBounds ohne positive Ergebnisse.

InformationsquelleAutor nopole | 2012-09-23
Schreibe einen Kommentar