«Экземпляр» обычно - «методы экземпляра», «переменные экземпляра» и т. Д. Нестатические тоже работают, если вы находите это проще.
Я не уверен, что действительно поместил бы все эти регионы в ...
Вы имеете в виду, что ваша реализация подкласса не вызывается при вызове touchesBegan, touchesMoved и touchesEnded?
Похоже, проблема в том, как вы? мы создали экземпляр объекта. Думаю, требуются более подробные сведения.
(комментарии взяты из формы)
Заголовочный файл
#import <UIKit/UIKit.h>
@interface MyWebView : UIWebView { } @end
Файл реализации
#import "MyWebView.h"
@implementation MyWebView
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) { } return self;
}
- (void)drawRect:(CGRect)rect {
NSLog(@"MyWebView is loaded");
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touches began");
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Touches ended");
}
- (void)dealloc {
[super dealloc];
}
@end
Я не уверен, что это то, что вы хотите (это не то, о чем вы просили, но это может сработать в зависимости от вашей конечной игры), но вместо этого вы можете интерпретировать штрихи в JavaScript изнутри UIWebView и получить javascript для выполнения
document.location='http://null/'+xCoord+'/'+yCoord; // Null is arbitrary.
Затем вы можете уловить это с помощью метода делегата UIWebView
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
. И если request.URL.host (или что-то еще) isEqualToString: @ "null" возьмет соответствующий действие (и верните NO вместо YES). Вы даже можете добавить JS на каждую страницу, выполнив что-нибудь вроде:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView stringByEvaluatingJavaScriptFromString:@"window.ontouchstart=function(/* ... */);"];
}
Надеюсь, это поможет?
Я бы попытался переопределить -sendEvent: в UIWindow, чтобы узнать, можете ли вы перехватить эти события касания.
Следуя тому, что сказал Unfalkster, вы можете использовать метод hitTest для достижения что вы хотите, но вам не нужно создавать подкласс UIWindow. Просто поместите это в свой подкласс веб-представления. Вы получите предупреждение во время компиляции, но оно работает:
- (void)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (event.type == UIEventTypeTouches) {
// get location info
CGFloat x = point.x;
CGFloat y = point.y;
// get touches
NSSet *touches = [event allTouches];
// individual touches
for (UITouch *touch in touches) {
if (touch.phase == UITouchPhaseBegan) {
// touches began
} else if (touch.phase == UITouchPhaseMoved) {
}
// etc etc
}
}
// call the super
[super hitTest:point withEvent:event];
}
Надеюсь, это поможет!
Вы можете поместить UIView
поверх UIWebView
и перекрыть touchDidBegin
и т. Д., А затем отправить их в свой веб-просмотр. Пример:
Пользователь касается вашего UIView
, что вызывает
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// Execute your code then send a touchesBegan to your webview like so:
[webView touchesBegan:touches withEvent:event];
return;
}
, что ваш UIView
должен быть поверх веб-просмотра.