0

我在 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 WantedFullScreenLayout 范围是:[-25.5 .. 449]

带状态栏和YES WantsFullScreenLayout 范围是:[-5.5 .. 469]

没有状态栏和 NO/YES FullScreenLayout 范围是:[-5.5 .. 469]


带状态栏和 NO WantsFullScreenLayout 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)


请帮助解释这些东西,它只发生在设备上......

4

3 回答 3

0

因为状态栏超出了视图的范围。当您触摸状态栏时,您会得到负值。

尝试这个:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch* touch = [touches anyObject];
    CGPoint point = [touch locationInView:[touch window]];
    NSLog(@"%@", NSStringFromCGPoint(point));
}
于 2012-11-03T19:52:40.657 回答
0

根 viewController 的视图总是像纵向模式一样。您应该在根视图内插入一个新视图。根据苹果的说法,这个新视图将正确运行,将给出正确的大小和坐标。

例如 ;

UIView *v = self;
while ([[v superview] superview] != NULL) {
    v = [v superview];
}

UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:v];

touchPoint 将是正确的。

于 2013-04-01T13:19:24.530 回答
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 坐标才能获得您期望的结果。希望这可以帮助。

于 2012-11-05T07:50:05.783 回答