2017-08-15 2 views
0

J'essaie de créer une application qui utilise skiasharp sur une superposition pour l'appareil photo sur iPhone (natif). Mon flux de caméra apparaît bien mais pas de superposition. la viewcontroller initiale qui crée le flux ressemble:créer superposition de caméra skiasharp xamarin ios

public async override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 
     await AuthorizeCameraUse(); 

     imagePicker = new UIImagePickerController(); 

     // set our source to the camera 
     imagePicker.SourceType = UIImagePickerControllerSourceType.Camera; 

     // set 
     imagePicker.MediaTypes = new string[] { "public.image" }; 



     imagePicker.CameraOverlayView = new CameraOverlayView(); 

     imagePicker.ModalPresentationStyle = UIModalPresentationStyle.CurrentContext; 
     . . . 

mon CameraOverlayView ressemble:

public class CameraOverlayView :SKCanvasView 
{ 
    public CameraOverlayView() : base() 
    { 
     Initialize(); 
    } 
    public CameraOverlayView(CGRect frame) : base(frame) { 
     Initialize(); 
    } 
    SKPaint paint = new SKPaint 
    { 
     Style = SKPaintStyle.Fill, 
     Color = SKColors.Red, 
     StrokeWidth = 25 
    }; 

    protected void Initialize() 
    { 

     this.PaintSurface += CameraOverlayView_PaintSurface; 
     //using (var surface = SKSurface.Create(640, 480, SKColorType.Rgba8888, SKAlphaType.Premul)) 
     //{ 
     // SKCanvas myCanvas = surface.Canvas; 
     // myCanvas.DrawCircle(300, 300, 100, paint); 
     // // Your drawing code goes here. 
     //} 
    } 

    private void CameraOverlayView_PaintSurface(object sender, SKPaintSurfaceEventArgs e) 
    { 
     var surface = e.Surface; 
     // then we get the canvas that we can draw on 
     var canvas = surface.Canvas; 
     // clear the canvas/view 
     canvas.Clear(SKColors.White); 


     // DRAWING SHAPES 

     // create the paint for the filled circle 
     var circleFill = new SKPaint 
     { 
      IsAntialias = true, 
      Style = SKPaintStyle.Fill, 
      Color = SKColors.Blue 
     }; 
     // draw the circle fill 
     canvas.DrawCircle(100, 100, 40, circleFill); 
    } 
} 

mon événement de peinture est jamais tiré, si je lance ce code dans l'exemple simple, il fait.

Répondre

0

grâce à Russ Fustino aide il s'avère que je n'utilisais pas le constructeur CameraOverlayView (CGRect frame) : base (frame) et à cause de cela la surcharge DrawInSurface n'est pas appelée. Rien à quoi puiser. quand je l'ai fait l'événement de peinture a tiré.