我在iOS中发现了有趣的错误,但试图相信我错了。你必须做两件事:
1)为iOS创建单视图模板
2)在ViewController.m中编写小函数:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch* touch = [touches anyObject];
CGPoint point = [touch locationInView:[touch view]];
NSLog(@"%@", NSStringFromCGPoint(point));
}// so u can detect points of your touch
所以如果你试图从屏幕的上到下移动手指(肖像模式) - 你得到的范围 [ - 5.5 .. 469] ......我无法解释这个,它只发生在设备上,在模拟器中它工作正常。
某些调查信息:
状态栏和NO wantFullScreenLayout范围是:[ - 25.5 .. 449]
状态栏和YES wantsFullScreenLayout范围是:[ - 5.5 .. 469]
没有状态栏和NO / YES FullScreenLayout范围是:[ - 5.5 .. 469]
状态栏和NO wantFullScreenLayout view.frame是(0,20,320,460),view.bounds是(0,0,320,460)
状态栏和YES wantsFullScreenLayout view.frame是(0,0,320,480),view.bounds是(0,0,320,480)
没有状态栏和NO / YES FullScreenLayout view.frame是(0,0,320,480),view.bounds也是(0,0,320,480)
请帮助解释这些东西,它只发生在设备上......
答案 0 :(得分:0)
因为状态栏超出了视图的限制。当你触摸状态栏时,你会得到负值。
试试这个:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch* touch = [touches anyObject];
CGPoint point = [touch locationInView:[touch window]];
NSLog(@"%@", NSStringFromCGPoint(point));
}
答案 1 :(得分:0)
我从Apple的一个关于手指绘画程序的教程中找到了这个:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGRect bounds = [self bounds];
UITouch* touch = [[event touchesForView:self] anyObject];
firstTouch = YES;
// Convert touch point from UIView referential to OpenGL one (upside-down flip)
location = [touch locationInView:self];
location.y = bounds.size.height - location.y;
}
看起来您需要将触摸转换为OpenGL坐标以获得您期望的结果。希望这会有所帮助。
答案 2 :(得分:0)
根视图控制器的视图始终像纵向模式一样。您应该在根目录中插入新视图。根据Apple的说法,这个新视图将正确运行,将提供正确的大小和坐标。
例如;
UIView *v = self;
while ([[v superview] superview] != NULL) {
v = [v superview];
}
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:v];
touchPoint将是正确的。