1

I want to draw a random design on uiview just like we are drawing on paint brush I want where user touch on screen start drawing. like if he wants to write ok in it than he can draw it.if he want to make duck or ball so he can make it. plz help me.

Chandni
  • 692
  • 1
  • 10
  • 25

2 Answers2

0

Try this. In this, You will have to use self.view.frame wherever i have myPic.Frame.

In Header File:

#import <Foundation/Foundation.h>

@interface DrawView : UIView {

    UIImage *myPic;

    NSMutableArray *myDrawing;

}

-(void)drawPic:(UIImage *)thisPic;

-(void)cancelDrawing;

@end

and in Implementation File:

#import "DrawView.h"

@implementation DrawView

-(void)drawPic:(UIImage *)thisPic {

    myPic = thisPic;

    [myPic retain];

    [self setNeedsDisplay];

}

- (void)drawRect:(CGRect)rect {

    float newHeight;

    float newWidth;

    if (!myDrawing) {

        myDrawing = [[NSMutableArray alloc] initWithCapacity:0];

    }

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    if (myPic != NULL) {

        float ratio = myPic.size.height/460;

        if (myPic.size.width/320 > ratio) {

            ratio = myPic.size.width/320;

        }

        newHeight = myPic.size.height/ratio;

        newWidth = myPic.size.width/ratio;

        [myPic drawInRect:CGRectMake(0,0,newWidth,newHeight)];

    }

    if ([myDrawing count] > 0) {

        CGContextSetLineWidth(ctx, 5);

        for (int i = 0 ; i < [myDrawing count] ; i++) {

            NSArray *thisArray = [myDrawing objectAtIndex:i];

            if ([thisArray count] > 2) {

                float thisX = [[thisArray objectAtIndex:0] floatValue];

                float thisY = [[thisArray objectAtIndex:1] floatValue];

                CGContextBeginPath(ctx);

                CGContextMoveToPoint(ctx, thisX, thisY);

                for (int j = 2; j < [thisArray count] ; j+=2) {

                    thisX = [[thisArray objectAtIndex:j] floatValue];

                    thisY = [[thisArray objectAtIndex:j+1] floatValue];

                    CGContextAddLineToPoint(ctx, thisX,thisY);

                }

                CGContextStrokePath(ctx);

            }

        }

    }

}

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    [myDrawing addObject:[[NSMutableArray alloc] initWithCapacity:4]];

    CGPoint curPoint = [[touches anyObject] locationInView:self];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.x]];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.y]];

}

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    CGPoint curPoint = [[touches anyObject] locationInView:self];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.x]];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.y]];

    [self setNeedsDisplay];

}

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    CGPoint curPoint = [[touches anyObject] locationInView:self];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.x]];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.y]];

    [self setNeedsDisplay];

}

-(void)cancelDrawing {

    [myDrawing removeAllObjects];

    [self setNeedsDisplay];

}

- (void)dealloc {

    [super dealloc];

    [myPic release];

    [myDrawing release];

}

@end
Dunja Lalic
  • 752
  • 13
  • 26
0

you will have to make your UIView a subClass of the above. And in your controller class.m file, you'll have to add and call these two methods. I hope this works.

-(IBAction)clear {

[self.view cancelDrawing];

}

-(IBAction)saveDrawing {

UIGraphicsBeginImageContext(self.view.bounds.size);

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *finishedPic = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(finishedPic, self, @selector(exitProg:didFinishSavingWithError:contextInfo:), nil);

}