This is how i have done masking and this worked for me.
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage1
{
float width,height;
width=288.0;
height=274.0;
CGContextRef mainViewContentContext; CGColorSpaceRef colorSpace;
UIImage *orgImage=image;
CGImageRef img = [orgImage CGImage];
colorSpace = CGColorSpaceCreateDeviceRGB();
mainViewContentContext = CGBitmapContextCreate (NULL, width, height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorSpace);
if (mainViewContentContext==NULL)
return NULL;
CGRect subImageRect;
CGImageRef tileImage;
float xCord=0;
float yCord=0;
subImageRect = CGRectMake(xCord,yCord,width,height);
tileImage = CGImageCreateWithImageInRect(img,subImageRect);
//UIImageWriteToSavedPhotosAlbum([UIImage imageWithCGImage:tileImage],nil,nil,nil);
CGImageRef maskImage = maskImage1.CGImage;
CGContextClipToMask(mainViewContentContext, CGRectMake(0, 0, width, height), maskImage);
CGContextDrawImage(mainViewContentContext, CGRectMake(0, 0, width, height), tileImage);
//UIImageWriteToSavedPhotosAlbum([UIImage imageWithCGImage: maskImage],nil,nil,nil);
CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(mainViewContentContext);
CGContextRelease(mainViewContentContext);
UIImage *theImage = [UIImage imageWithCGImage:mainViewContentBitmapContext];
//UIImageWriteToSavedPhotosAlbum(theImage,nil,nil,nil);
CGImageRelease(mainViewContentBitmapContext);
return theImage;
}
AND THIS IS HOW I HAVE MOVED THE IMAGE
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if([timer isValid])
[timer invalidate];
NSSet *allTouches = [event allTouches];
switch ([allTouches count])
{
case 1: {
//The image is being panned (moved left or right)
UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
CGPoint centerPoint = [touch locationInView:[self view]];
[imgView setCenter:centerPoint];
NSLog(@"Center.x=%f Center.y=%f",centerPoint.x,centerPoint.y);
} break;
case 2: {
//The image is being zoomed in or out.
UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0];
UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];
//Calculate the distance between the two fingers.
CGFloat finalDistance = [self distanceBetweenTwoPoints:[touch1 locationInView:[self view]] toPoint:[touch2 locationInView:[self view]]];
NSLog(@"Initial=%f Final=%f",initialDistance,finalDistance);
//Check if zoom in or zoom out.
//Check if zoom in or zoom out.
int width;
int height;
if(initialDistance < finalDistance) {
NSLog(@"Zoom Out");
zx=imgView.frame.origin.x-2.5;
zy=imgView.frame.origin.y-2.5;
width=imgView.frame.size.width+5;
height=imgView.frame.size.height+5;
}
else
{
NSLog(@"Zoom In");
zx=imgView.frame.origin.x+2.5;
zy=imgView.frame.origin.y+2.5;
width=imgView.frame.size.width-5;
height=imgView.frame.size.height-5;
}
imgView.frame = CGRectMake(zx,zy,width,height);
initialDistance = finalDistance;
} break;
}
}
hAPPY cODING...