проблема с отображением UIView в iOS

мое приложение имеет ViewController, который содержит внутри UIView (CanvasView), где вы можете нарисовать свою подпись (я добавил ярлык "Hi Little John", чтобы отличить его), и я также добавил под ним UIImage для съемки, касаясь камеры кнопка

enter image description here

Теперь, когда я касаюсь кнопки камеры, он захватывает только UIView и UILabel, но не подпись, поскольку она показывает

enter image description here

У меня есть два класса: мой класс UIView (CanvasView) и мой UIViewController, в моем CanvasView У меня есть этот код для скриншота:

@implementation CanvasView

-(UIImage *)getCanvasScreenshot{

    //first it makes an UIImage from the view
    UIGraphicsBeginImageContext(self.bounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *sourceImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    //now it will position the image, X/Y away from top left corner to get the portion required
    UIGraphicsBeginImageContext(self.frame.size);

    [sourceImage drawAtPoint:CGPointMake(0, 0)];

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

    return croppedImage;
}

//some other code goes here...

@end

в моем классе ViewController у меня есть мой IBAction, который запускает событие

- (IBAction)captureSignature:(id)sender {

    self.imageFirma.image = [canvasView getCanvasScreenshot];
}

Я хочу захватить подпись на моем снимке любую помощь, которую я буду признателен

заранее спасибо


***** EDIT ** код для рендеринга подписи также в CanvasView, это три метода

  • (void) touchBegan: (NSSet *) касается событияEvent: (UIEvent *)
  • (void) touchesMoved: (NSSet *) касается событияEvent: (UIEvent *)
  • (void) touchesEnded: (NSSet *) касается событияEvent: (UIEvent *)

в зависимости от события, если прикосновение:

  • в начале (прикосновения)
  • если он движется (касаетсяMoved)
  • или если он завершен (затрагивается)

для визуализации штриха все они вызывают метод с именем:

  • (void) addLineToAndRenderStroke: (SmoothStroke *) currentStroke toPoint: (CGPoint) end toWidth: (CGFloat) width toColor: (UIColor *) color

Я могу пойти глубже, если вы захотите, но это очень долго, потому что это основа для создания штрихов на холсте, а код всех этих методов:

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

    if(![JotStylusManager sharedInstance].enabled){
        for (UITouch *touch in touches) {
            [self addLineToAndRenderStroke:[self getStrokeForTouchHash:touch.hash]
                                   toPoint:[touch locationInView:self]
                                   toWidth:[self widthForPressure:JOT_MIN_PRESSURE]
                                   toColor:[self colorForPressure:JOT_MIN_PRESSURE]];

        }
    }
}

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


    if(![JotStylusManager sharedInstance].enabled){
        for (UITouch *touch in touches) {
            // check for other brands of stylus,
            // or process non-Jot touches
            //
            // for this example, we'll simply draw every touch if
            // the jot sdk is not enabled
            [self addLineToAndRenderStroke:[self getStrokeForTouchHash:touch.hash]
                                   toPoint:[touch locationInView:self]
                                   toWidth:[self widthForPressure:JOT_MIN_PRESSURE]
                                   toColor:[self colorForPressure:JOT_MIN_PRESSURE]];

        }
    }
}

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

    if(![JotStylusManager sharedInstance].enabled){
        for(UITouch* touch in touches){
            SmoothStroke* currentStroke = [self getStrokeForTouchHash:touch.hash];

            // now line to the end of the stroke
            [self addLineToAndRenderStroke:currentStroke
                                   toPoint:[touch locationInView:self]
                                   toWidth:[self widthForPressure:JOT_MIN_PRESSURE]
                                   toColor:[self colorForPressure:JOT_MIN_PRESSURE]];

            // this stroke is now finished, so add it to our completed strokes stack
            // and remove it from the current strokes, and reset our undo state if any
            [_stackOfStrokes addObject:currentStroke];
            [currentStrokes removeObjectForKey:@([touch hash])];
            [stackOfUndoneStrokes removeAllObjects];
        }
    }
}


- (void) addLineToAndRenderStroke:(SmoothStroke*)currentStroke toPoint:(CGPoint)end toWidth:(CGFloat)width toColor:(UIColor*)color{

    // fetch the current and previous elements
    // of the stroke. these will help us
    // step over their length for drawing
    AbstractBezierPathElement* previousElement = [currentStroke.segments lastObject];

    // Convert touch point from UIView referential to OpenGL one (upside-down flip)
    end.y = self.bounds.size.height - end.y;
    if(![currentStroke addPoint:end withWidth:width andColor:color]) return;

    //
    // ok, now we have the current + previous stroke segment
    // so let set to drawing it!
    [self renderElement:[currentStroke.segments lastObject] fromPreviousElement:previousElement includeOpenGLPrep:YES];
}
+1
источник поделиться

Посмотрите другие вопросы по меткам или Задайте вопрос