2009-12-28 2 views
5

Ich habe Probleme, ein rechteckiges Rechteck zum Zuschneiden meiner Bilder zu erstellen. Ich versuche, etwas wie dieses Bild zu erreichen:iPhone - Wie wird ein vergrößerbares Rechteck zum Zuschneiden von Bildern erstellt?

http://img192.imageshack.us/img192/8930/customcropbox.jpg

Nun, das einzige Problem ist, ich habe keine Ahnung, wo man tatsächlich beginnen. Ich brauche einen Ratschlag, wie ich diesen Effekt des Cropping erreichen kann. Welche Dokumentation sollte ich lesen? Core Graphics oder Quarz 2d? Beide? Ich habe für das iPhone seit dem Veröffentlichungsdatum programmiert, aber ich habe nie Kerngrafiken und etc. verwendet. Jede Hilfe oder Beratung wäre sehr willkommen. Ich werde meinen Code hier nach oben werfen, während ich Fortschritte mache, um zu zeigen, wie es gemacht wird, wenn ich es erreiche. :-) Außerdem ist diese rechteckige Box in einem UIImageView über den Bildschirm beweglich, was sie einfach interessanter macht. Danke für die Hilfe und ich freue mich auf dieses Ziel.

+0

Hallo es Ihnen nur sicher helfen kann zu verschwenden nehmen schau mal: https://github.com/barrettj/BJImageCropper/network/members – RayofHope

+0

Hallo, hast du eine Lösung dafür bekommen? Ich stehe vor genau demselben Problem. – ScarletWitch

+1

Wenn Sie wie folgt Bild crop wie https://raw.github.com/yuyak/YKImageCropper/master/Example/screenshot.png dann verwenden Sie diese: https://github.com/yuyak/YKImageCropper – RayofHope

Antwort

1

Lesezeichen meine question die genau das gleiche ist.

Ich bin so weit gekommen, um meine Zuschneideansicht zu bewegen und sie den Teil des Bildes korrekt anzeigen zu lassen, aber das Scrollen mit der Zoomansicht ist in Arbeit. Zur Zeit habe ich eine Bildansicht und eine einfache UIView in der UIScrollview, dann außerhalb der Scrollview und auf einer höheren Ebene ist meine benutzerdefinierte Zuschneiden UIView. Ich implementieren die Berührungen Methoden behandeln es um Ziehen und auch drawRect:

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    if(self.image == nil) 
     return; 

    CGPoint offset = scrollView.contentOffset; 
    clipRect = CGRectOffset(self.frame, offset.x, offset.y); 

    UIImage *croppedImage = [image croppedImage:clipRect]; 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    [croppedImage drawAtPoint:CGPointMake(0, 0)]; 
} 

Hinweis: meine Zuschneiden Ansicht kein Nachkomme von UIImageView ist, es ist nur UIView mit einem Verweis auf das darunter liegende Bild aus der anderen Ansicht.

„croppedImage“ ist eine Kategorie auf UIImage und ziemlich einfach:

@implementation UIImage (Resize) 
- (UIImage *)croppedImage:(CGRect)bounds { 
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds); 
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return croppedImage; 
} 
... 
@end 

ich ein paar der UIScrollViewDelegate Methoden implementiert haben und durch Scrollen Aktivität passieren, so kann ich in sync meine Zuschneiden Ansicht halten. Auch das Zoomen wird mitgereicht, funktioniert aber wie erwähnt noch nicht wie gewünscht.

Noch ein Hinweis: Ich glaube nicht, es ist notwendig, die Zeit zum Erzeugen ein neues UIImage mit dem beschnittenen Bereich jedes Mal, als das gleiche soll möglich sein, mit

CGImageRef imageRef = CGImageCreateWithImageInRect([yourImage CGImage], bounds); 
and 
CGContextDrawImage(ctx, clipRect, imageRef); 
1

Quarz ist der 'Marketingbegriff' für Core Graphics, und hier sollten Sie anfangen. Sie sollten eine UIView (vollständige benutzerdefinierte Zeichnung in -drawRect :) verwenden, ihre Berührungen abfangen und nachverfolgen und dann das Ergebnis zeichnen. Sie können den aktuellen Grafikkontext mit UIGraphicsGetCurrentContext() abrufen. Das sollte ausreichen, um loszulegen!

+0

Klingt gut, danke für den ersten Schub. – 0SX

+0

klingt wirklich gut können Sie mit Beispielcode helfen, es zu tun – Marios

Verwandte Themen