2014-12-16 4 views
0

두 번 탭핑 된 gesturerecognizer를 구현했습니다. 사용자가 두 번 탭하면 해당 포인트에 주석을 추가합니다. 더 나아가서 도청 지점의 영역을 잘라내고 싶습니다. 그러나 매번 화면 크기가 달라집니다. 이 도움이ScreenShot Image - 탭 포인트의 주변 영역

- (void)handleTapGesture:(UITapGestureRecognizer *)sender { 
    if (sender.state == UIGestureRecognizerStateRecognized) { 
     // handling code  
     point = [sender locationInView:sender.view]; 
     iViewController.noteImageView.image=[self captureView:self.view]; 
     [self.view addSubview:iViewController.view]; 
    } 
} 

-(UIImage*)captureView:(UIView*)view 
    { 
     CGRect screenRect=CGRectMake(point.x-20,point.y-40,point.x+10,point.y+20); 
     //CGRect screenRect=[[UIScreen mainScreen]bounds]; 
     UIGraphicsBeginImageContext(screenRect.size); 

     CGContextRef ctx= UIGraphicsGetCurrentContext(); 
     [[UIColor blackColor]set]; 
     CGContextFillRect(ctx, screenRect); 
     [view.layer renderInContext:ctx]; 

     UIImage *scImage=UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 

     return scImage; 

    } 

답변

1

희망 :

-(UIImage*)captureView:(UIView*)view forPoint:(CGPoint)point 
{ 
    CGRect cropRect = CGRectMake(point.x-20,point.y-40,point.x+10,point.y+20); 
    UIGraphicsBeginImageContext(view.bounds.size); 
    CGContextRef ctx= UIGraphicsGetCurrentContext(); 

    [[UIColor blackColor] setFill]; 
    CGContextFillRect(ctx, view.bounds); 
    [view.layer renderInContext:ctx]; 
    CGImageRef snapshot = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext()); 

    CGImageRef cropped = CGImageCreateWithImageInRect(snapshot, cropRect); 
    UIImage *image = [UIImage imageWithCGImage:cropped]; 

    UIGraphicsEndImageContext(); 
    CGImageRelease(snapshot); 
    CGImageRelease(cropped); 

    return image; 
} 
+0

감사 비탈리, 그것은 매우 잘 작동합니다. 내가 추가 한 유일한 수정은 CGRect cropRect = CGRectMake (point.x-20, point.y-40,80,80); – casillas