iPhone - ¿Cómo hacer una redimensionable rectángulo de recorte de imágenes?
-
21-09-2019 - |
Pregunta
Estoy teniendo problemas para hacer un re-considerable rectángulo de recorte de mis imágenes.Estoy tratando de lograr algo como esta imagen:
http://img192.imageshack.us/img192/8930/customcropbox.jpg
Bien, el único problema es que no tengo idea de por dónde empezar realmente.Necesito algunos consejos de cómo puedo lograr este efecto de recorte.¿Qué documentación debo leer?Núcleo de Gráficos o de Cuarzo 2d?Tanto?He sido de codificación para el iPhone, ya que es la fecha de lanzamiento, pero en realidad nunca he usado núcleo de gráficos y etc.Cualquier consejo o ayuda sería muy apreciada.Voy a tirar mi código hasta aquí, ya que el progreso para mostrar cómo se hace cuando me lograrlo.:-) Además, esta caja rectangular es movible a través de la pantalla en un UIImageView que sólo la hace más interesante.Gracias por la ayuda y espero lograr este objetivo.
Solución
mi favorito pregunta que es exactamente el mismo.
Llegué tan lejos como el movimiento alrededor de mi recorte de la vista y tener que mostrar la parte de la imagen correctamente, pero el trato con el scrollview el zoom es un trabajo en progreso.actualmente tengo un imageview y la llanura UIView capas en el UIScrollview, entonces fuera de la scrollview y a un nivel superior es de mi costumbre de cultivo UIView.Me implementar los toques métodos para tratar con arrastrar a su alrededor, y también 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)];
}
Nota:mi recorte de vista NO es un descendiente de UIImageView, es sólo UIView con una referencia a la imagen de fondo desde el otro punto de vista.
"croppedImage" es una categoría en la UIImage y bastante simple:
@implementation UIImage (Resize)
- (UIImage *)croppedImage:(CGRect)bounds {
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return croppedImage;
}
...
@end
He aplicado algunas de las UIScrollViewDelegate métodos y pasar a través de la actividad de desplazamiento para que yo pueda mantener mi recorte de la vista en modo de sincronización.El zoom es pasado a lo largo de demasiado, pero como se ha mencionado, no funciona como se desea sin embargo.
Otra Nota:Creo que no es necesario perder el tiempo de generación de una nueva UIImage con el área recortada cada vez como la misma debería ser posible con
CGImageRef imageRef = CGImageCreateWithImageInRect([yourImage CGImage], bounds);
and
CGContextDrawImage(ctx, clipRect, imageRef);
Otros consejos
El cuarzo es el 'término de marketing' para el núcleo de gráficos, y ahí es donde debe empezar. Usted querrá utilizar un UIView (dibujo en -drawRect :), trampa de encargo completa y realizar un seguimiento de sus toques, y luego dibujar el resultado. Usted puede obtener la corriente Contexto Gráfico usando UIGraphicsGetCurrentContext (). Esto debería ser suficiente para que pueda empezar!