2012-10-01 11 views
9

Estoy creando un juego de rompecabezas para iPhone.iphone UIbezierpath imagen irregular recorte

aquí tengo que recortar la imagen al igual que el siguiente imagen

enter image description here

Después de la googlear llegué a conocer uibezier camino es el mejor para recortar la imagen en formas irregulares.

Pero no recibí ningún código o idea de cómo recortar la imagen como la de arriba.

+0

Mire mi respuesta aquí http://stackoverflow.com/questions/13153223/how-to-crop-the-image-using-uibezierpath/ 15353848 # 15353848 –

Respuesta

8

Tomará mucho tiempo de prueba y error, lo hice rápidamente solo para darle una idea de cómo crear formas usando Bezier Paths. A continuación se muestra código de ejemplo para crear una forma cuadrada que rápidamente me creado

UIBezierPath *aPath = [UIBezierPath bezierPath]; 

    // Set the starting point of the shape. 
    [aPath moveToPoint:CGPointMake(50.0, 50.0)]; 
    // Draw the lines. 
    [aPath addLineToPoint:CGPointMake(100.0, 50.0)]; 
    [aPath addLineToPoint:CGPointMake(100.0, 100.0)]; 
    [aPath addLineToPoint:CGPointMake(50.0, 100.0)]; 
    [aPath closePath]; 

    CAShapeLayer *square = [CAShapeLayer layer]; 
    square.path = aPath.CGPath; 
    [self.view.layer addSublayer:square]; 

Si tuviera más tiempo, podría crear la imagen, pero lo hizo tan rápidamente como no tienen demasiado tiempo. No es demasiado difícil de usar una vez que conoces cómo se hacen los puntos. Le tomará un montón de prueba y error para crear esta forma, pero use el código que proporcioné como base para crear formas usando las rutas de Bezier. Necesitarás crear muchos más puntos para terminar con la forma que tienes en mente.

También recomendaría mirar guía Manzanas desarrollador para la creación de formas irregulares

http://developer.apple.com/library/ios/#documentation/2ddrawing/conceptual/drawingprintingios/BezierPaths/BezierPaths.html

En particular, hacia los "Adición de curvas a la ruta" para la comprensión de cómo crear curvas y agregarlos a su imagen . Necesitará que con el fin de crear el rompecabezas pieza del rompecabezas de forma que usted está tratando de crear

EDIT:

Pruebe este método

- (void) setClippingPath:(UIBezierPath *)clippingPath : (UIImageView *)imgView; 
{ 
    if (![[imgView layer] mask]) 
     [[imgView layer] setMask:[CAShapeLayer layer]]; 

    [(CAShapeLayer*) [[imgView layer] mask] setPath:[clippingPath CGPath]]; 
} 

El método anterior se llevará a un trazado Bézier y un ImageView y luego aplica la ruta Bezier a esa particular imageView. Hará el recorte también. Me tomará muchas pruebas y errores, me imagino que para obtener la forma correcta, puede ser difícil y frustrante crear formas complejas a veces.

ejemplo rápido de la aplicación de este código

UIBezierPath *aPath = [UIBezierPath bezierPath]; 
    // Set the starting point of the shape. 
    [aPath moveToPoint:CGPointMake(0.0, 0.0)]; 
    // Draw the lines. 
    [aPath addLineToPoint:CGPointMake(50.0, 0.0)]; 
    [aPath addLineToPoint:CGPointMake(50.0, 50.0)]; 
    [aPath addLineToPoint:CGPointMake(0.0, 50.0)]; 
    [aPath closePath]; 

    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bar.png"]]; 
    imgView.frame = CGRectMake(0, 0, 100, 100); 
    [self setClippingPath:aPath :imgView]; 
    [self.view addSubview:imgView]; 

hace justo rápidamente una plaza fuera de la parte superior izquierda de la imagen. Si, por ejemplo, tiene una imagen cuadrada, puede recorrer el ancho y el alto de la imagen, recortar en cuadrados separados usando el código anterior y devolverlos individualmente. Crear una pieza de rompecabezas mucho más complicada, pero espero que esto ayude

+0

muchas gracias por su respuesta y pasar tiempo con mi pregunta es realmente apreciable. Sí, ahora tengo claro en qué camino debo viajar y aquí mi otra pregunta es recortar la imagen. ¿tienes alguna idea sobre eso? recortando con curva trazada usando esta ruta uibezier? – nik

+0

Y solo quiero hacer coincidir este patrón con uiimage y solo quiero recortar la imagen con ese patrón – nik

+1

Ver mi edición, incluí un método que puede usar donde tomará bezier path y un imageView y hará el recorte para usted . Espero que ayude – AdamM

Cuestiones relacionadas