Jak mogę uzyskać piksel RGBA punktu z WKWebView?iOS WKWebView uzyskać piksel RGBA z punktu
Mam działające rozwiązanie dla UIWebView, ale zamiast tego chciałbym użyć WKWebView. Kiedy dotknę punktu na ekranie, jestem w stanie pobrać wartość koloru w RGBA z UIWebView na przykład (0,0,0,0), gdy jest przezroczysta lub coś podobnego (0.76,0.23,0.34,1), gdy nie jest przezroczysty. Zamiast tego WKWebView zawsze zwraca (0,0,0,0).
Więcej szczegółów
pracuję nad aplikacji iOS z WebView jako najbardziej górnego elementu UI.
WebView ma obszary, które są przezroczyste, dzięki czemu można zobaczyć podstawowe UIView.
WebView będzie ignorował dotknięcia na przezroczystych obszarach, a bazowy UIView powinien pobrać zdarzenie.
Nich zrobiłem zastąpić funkcję 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
Moje założenie jest, że WKWebView ma inny CALayer lub ukryty UIView gdzie czerpać rzeczywiste internetowej, aby.
Zmieniając tylko '[layer renderInContext: context];' w starym kodzie na 'UIGraphicsPushContext (context); [self drawViewHierarchyInRect: self.bounds afterScreenUpdates: YES]; UIGraphicsPopContext(); 'działa cudownie ... czasami nie wiem jak wy wymyślacie takie rzeczy. Dzięki! – Bruce