Wie kann ich mit CGContextDrawTiledImage ein Bild kacheln?

8

Ich möchte in der Lage sein, ein UI-Objekt wie eine UIImageView darzustellen und ein Bild darin zu kacheln.

Ich konnte CGContextDrawTiledImage verwenden, um den Hintergrund im Hauptfenster, aber nicht eine Bildansicht zu aktualisieren. Ich kann dies tun, wenn ich die DrawRect-Funktion in der MainView-Klasse ändern.

Ich fühle, dass ich nahe bin, aber immer noch etwas vermisse. Kann mir jemand in die richtige Richtung zeigen?

%Vor%

}

    
Chris Craft 25.03.2009, 01:42
quelle

5 Antworten

17

Nehmen wir an, Sie haben ein CGImageRef für das Bild, das Sie mit dem Namen tileImage versehen möchten, und ein UIImageView namens imageView . Sie müssen ein UIImage erstellen, um es der Eigenschaft image von imageView zuzuordnen. Sie können das so machen:

%Vor%

Dies erstellt einen Bitmap-Bildkontext der gewünschten Größe, kachelt das Bild in diesen Kontext ein, holt einen UIImage aus dem Kontext und weist ihn dann dem UIImageView zu. Sie können diesen Code wirklich überall hinstellen, solange die Bildansicht und das Kachelbild geladen sind und fertig sind.

    
Alex 01.04.2009, 21:03
quelle
26

Wenn Sie nur ein Bild in der Ansicht kacheln möchten, ändern Sie es in eine normale UIView und kacheln Sie den Hintergrund mit UIColor initWithPatternImage:

%Vor%     
Chris Blackwell 12.07.2010 07:25
quelle
2

Anstatt zu versuchen, eine UIImageView zu ändern, sollten Sie stattdessen UIView erstellen. UIImageView wurde speziell für ein nicht-gekacheltes Bild entwickelt und einige der Interna können Sie verpfuschen. Es ist nicht wirklich beabsichtigt, in der Art und Weise, wie du es beschreibst, verändert zu werden.

In einer Unterklasse von UIView (UITiledImageView?) können Sie mit der drawRect: -Methode tun, was Sie wollen. Sie können sogar Ivars für das Bild, seine Größe und Tiling-Eigenschaften für mehr Flexibilität und Erweiterbarkeit erstellen.

Mit Beispielprojekt aktualisiert: Ссылка

Der entsprechende Zeichencode:

%Vor%     
amattn 29.03.2009 19:19
quelle
1

Tut mir leid, dass ich nicht weiß, wie ich den Antworten anderer Kommentare hinzufügen kann. Deshalb habe ich hier eine neue Antwort erstellt:

Ich möchte nur darauf hinweisen, dass die Antwort von Kailoa Kadano einen Bug hat, die image_rect.origin ist nicht richtig initialisiert.

Vor ungefähr drei Wochen habe ich seinen Code in meinem Projekt kopiert, und es scheint zu funktionieren. Gestern versuchte ich jedoch, den Code im iOS-Simulator (iPhone 4.3) auszuführen, er blieb einfach in CGContextDrawTiledImage hängen. Nach dem Hinzufügen der folgenden Zeile, wie in Keremks Antwort gezeigt:

%Vor%

es funktioniert wieder!

Es ist ziemlich schwierig, eigentlich habe ich zuerst unter dem iPhone 4.3 Simulator getestet, dann habe ich kürzlich unter dem iPhone 4.0 Simulator getestet, dann gestern, als ich wieder auf den 4.3 Simulator oder 4.2 Simulator umschaltete, tritt das Problem auf. Das ist die image_rect.origin ist undefiniert, manchmal ist es Null Daten, vielleicht hat es manchmal einige zufällige Daten.

    
xiangz 31.07.2011 03:34
quelle
0

Ich habe dies kürzlich getan, indem ich eine benutzerdefinierte UIView erstellt habe.

%Vor%

und für die .m-Datei:

%Vor%     
keremk 29.03.2009 19:30
quelle

Tags und Links