2013-08-29 2 views
0

Я рисую подпись в приложении ipad, она работает нормально, но проблема в том, что при сохранении изображения она также сохраняет границу сигнатурного изображения. Я хочу сохранить только область рисования, не полную. вот мой кодРисование подписи в приложении ipad и преобразование его в изображение

signatureView=[[UIView alloc] initWithFrame:CGRectMake(100,100,800,500)]; 
signatureView.backgroundColor=[UIColor colorWithRed:242.0/255.f green:242/255.0f blue:242/255.0f alpha:1]; 


signatureView.layer.borderWidth =4; 
signatureView.layer.borderColor = [UIColor colorWithRed:23.0/255.0f green:190/255.0f blue:210/255.0f alpha:1].CGColor; 
signatureView.layer.cornerRadius=30; 




[self.view addSubview:signatureView]; 



UIButton*OkButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [OkButton setFrame:CGRectMake(320,448,118,49)]; 
    [OkButton setTitle:@"OK" forState:UIControlStateNormal]; 

[OkButton setImage:[UIImage imageNamed:@"okT.png"] forState:UIControlStateNormal]; 


    [OkButton addTarget:self action:@selector(onOKButtonClick) forControlEvents:UIControlEventTouchUpInside]; 
[signatureView addSubview:OkButton]; 

UILabel*textLabel=[[UILabel alloc] initWithFrame:CGRectMake(20,6,300,50)]; 

textLabel.font=[UIFont fontWithName:@"Helvetica-Bold" size:16]; 
[email protected]"Use the touchscreen to sign here"; 
textLabel.backgroundColor=[UIColor clearColor]; 
textLabel.textColor=[UIColor grayColor];  
[signatureView addSubview:textLabel]; 


    drawScreen=[[MyLineDrawingView alloc]initWithFrame:CGRectMake(10,50,780,400)]; 
    [signatureView addSubview:drawScreen]; 
    [drawScreen release]; 


    //MyLineDrwaingView 


    @interface MyLineDrawingView : UIView { 

    UIBezierPath *myPath; 
    UIColor *brushPattern; 
    } 

    @end 


    #import "MyLineDrawingView.h" 


    @implementation MyLineDrawingView 

    - (id)initWithFrame:(CGRect)frame 
    { 

    self = [super initWithFrame:frame]; 
    if (self) { 
    // Initialization code 

    self.backgroundColor=[UIColor whiteColor]; 
    myPath=[[UIBezierPath alloc]init]; 
    myPath.lineCapStyle=kCGLineCapRound; 
    myPath.miterLimit=0; 
    myPath.lineWidth=10; 
    //brushPattern=[UIColor redColor]; 
    brushPattern=[UIColor blackColor]; 

     } 
     return self; 
    } 


    // Only override drawRect: if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    - (void)drawRect:(CGRect)rect 
    { 

    [brushPattern setStroke]; 
    [myPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0]; 
    } 

    #pragma mark - Touch Methods 

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

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 
    [myPath moveToPoint:[mytouch locationInView:self]]; 

    } 

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

    { 

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 
    [myPath addLineToPoint:[mytouch locationInView:self]]; 
    [self setNeedsDisplay]; 

    } 


-(void)onOKButtonClick { 
CGRect rect = [drawScreen bounds]; //use your signature view's Rect means Frame; 
UIGraphicsBeginImageContext(rect.size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[signatureView.layer renderInContext:context]; //this line is also important for you 
UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    signImageView.image = img; 
} 

ответ

1

Это ТАК тема имеет точно такую ​​же проблему (рисунок и сохранение подписи на IOS): iOS: How to convert the self-drawn content of an UIView to an image (widespread general solution returns blank image)?

Пожалуйста, попробуйте и отметьте ваш вопрос решен, если это помогает.

+0

спасибо я получил решение работает –

2

я реализовал в своем коде свою работу для меня следовать:

.h файл добавить UIGestureRecognizerDelegate

.m FIEL

-(void)scrollGesture:(UIGestureRecognizer *)sender 
{ 

    CGPoint touchLocation = [sender locationInView:scrollView]; 

    NSLog(@"%d %d %d %d",touchLocation.y > signatureViewOne.frame.origin.y,touchLocation.y < signatureViewOne.frame.origin.y+80,touchLocation.x > 3, touchLocation.x < 308); 
    if ((touchLocation.y > signatureViewOne.frame.origin.y && touchLocation.y < signatureViewOne.frame.origin.y+80) &&(touchLocation.x > 3 && touchLocation.x < 308)) 
    { 
     NSLog(@"Signone found"); 
     scrollView.scrollEnabled = NO; 

    } 
    else 

    if ((touchLocation.y > signatureViewTwo.frame.origin.y && touchLocation.y < signatureViewTwo.frame.origin.y+80) &&(touchLocation.x > 3 && touchLocation.x < 308)) 
    { 
     NSLog(@"SignTwo found"); 
     scrollView.scrollEnabled = NO; 

    } 
    else 
    { 
     NSLog(@"not found"); 
     scrollView.scrollEnabled = YES; 
     sender.enabled = YES; 
    } 


} 
Смежные вопросы