Come si ottiene il colore del pixel RGBA di un punto da un WKWebView?iOS WKWebView ottiene il colore del pixel RGBA dal punto
Ho una soluzione funzionante per UIWebView, ma vorrei invece utilizzare WKWebView. Quando tocco su un punto dello schermo sono in grado di recuperare il valore del colore in RGBA da UIWebView ad esempio (0,0,0,0) quando è trasparente o qualcosa del genere (0,76,0.23,0.34,1) quando non trasparente Il WKWebView restituisce sempre (0,0,0,0) invece.
Maggiori dettagli
sto lavorando su un app iOS con una WebView come un elemento dell'interfaccia utente più alto.
La visualizzazione Web dispone di aree che sono trasparenti in modo da poter vedere il UIView sottostante.
La WebView ignora i tocchi sulle aree trasparenti e l'UIView sottostante recupera invece l'evento.
Perciò ho fatto ignorare la funzione hitTest:
#import "OverlayView.h"
#import <QuartzCore/QuartzCore.h>
@implementation OverlayView
-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {
UIView* subview = [super hitTest:point withEvent:event]; // this will always be a webview
if ([self isTransparent:point fromView:subview.layer]) // if point is transparent then let superview deal with it
{
return [self superview];
}
return subview; // return webview
}
- (BOOL) isTransparent:(CGPoint)point fromView:(CALayer*)layer
{
unsigned char pixel[4] = {0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);
CGContextTranslateCTM(context, -point.x, -point.y);
[layer renderInContext:context];
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return (pixel[0]/255.0 == 0) &&(pixel[1]/255.0 == 0) &&(pixel[2]/255.0 == 0) &&(pixel[3]/255.0 == 0) ;
}
@end
La mia ipotesi è che il WKWebView ha un CALayer diverso o un UIView nascosta in cui disegnare la pagina web effettivo.
Cambiando semplicemente '[layer renderInContext: context];' nel vecchio codice in 'UIGraphicsPushContext (context); [self drawViewHierarchyInRect: self.bounds afterScreenUpdates: YES]; UIGraphicsPopContext(); 'funziona meravigliosamente .. a volte non so come voi ragazzi capite cose come questa. Grazie! – Bruce