Search code examples
iphoneiosipad

Importing UIView to UIViewController


I am working on a iPad drawing app.. were i have a UIView class which i imported to UIView Controller. but i am getting errors at [self.view drawPic:image];like error: receiver type for uiview instance message does not declare a method with selector 'drawPic'.

Please find my full code below:

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@interface signPage : UIViewController<UIImagePickerControllerDelegate>{ 

    }
@property (retain, nonatomic) IBOutlet UIImageView * myImg;

@end



#import "signPage.h"
#import "DrawView.h"

@implementation signPage
@synthesize myImg;

- (void)viewDidLoad {
    [super viewDidLoad];
}



- (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);
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {

    [self dismissModalViewControllerAnimated:YES];

    [self.view drawPic:image];

}   

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

    [self dismissModalViewControllerAnimated:YES];


}

-(void)exitProg:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Your picture has been saved" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
    [alertView show];


}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}




@end

@interface DrawView : UIView {

    UIImage *myPic;
    NSMutableArray *myDrawing;
}



@end


#import "DrawView.h"


@implementation DrawView

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

    myPic = thisPic;

    [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/151;
        if (myPic.size.width/302 > ratio) {
            ratio = myPic.size.width/302;
        }

        newHeight = myPic.size.height/ratio;
        newWidth = myPic.size.width/ratio;

        [myPic drawInRect:CGRectMake(109,552,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];

}




@end

Kindly suggest me.


Solution

  • You've defined drawPic: only for your DrawView class, which you don't seem to use anywhere in your UIViewController. If you want the function to be accessible to every UIView class, you should define DrawPic as a category.