我有一个简单的应用程序向用户显示一个图像(在UIImageView中),它触摸屏幕的一部分,然后在下一个屏幕上显示相同的图像(在UIImageView中)但现在有一个“签名“重叠在上面。我遇到的问题是,似乎从触摸返回的x,y坐标似乎没有在第二个屏幕上的UIImageView上正确映射。
例如,当我触摸屏幕底部时,我得到:X:157.000000 Y:358.000000
但是屏幕的底部应该是480?因为我的屏幕尺寸是:屏幕高度和宽度X:320.000000 Y:480.000000。这会导致签名放置在与用户预期不同的位置。
我使用以下代码来获取触摸坐标:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"TOUCH HAPPENED");
UITouch *touch = [touches anyObject];
CGPoint touchCoordinates = [touch locationInView:self.view];
NSLog(@"X: %f Y: %f",touchCoordinates.x, touchCoordinates.y);
}
我使用以下代码将“签名”与我从触摸中获得的值放在一起:
CGRect screenRect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(screenRect.size);
[pageImage drawInRect:CGRectMake(0, 0, screenRect.size.width, screenRect.size.height)]; // this is the original image
NSLog(@"SCREEN HEIGHT AND WIDTH AT X: %f Y: %f",screenRect.size.width, screenRect.size.height);
NSLog(@"PLACING IT AT TOUCH COORDINATES X: %f Y: %f",sigLocation.x, sigLocation.y);
UIImage *shieldLogo = [UIImage imageNamed:@"shield_bw.gif"];
[shieldLogo drawInRect:CGRectMake(sigLocation.x, sigLocation.y, shieldLogo.size.width/2, shieldLogo.size.height/2)];
[theSignature drawAtPoint:CGPointMake(sigLocation.x+24.000000, sigLocation.y) withFont:[UIFont fontWithName:@"Arial" size:8.0]];
[theSignature2 drawAtPoint:CGPointMake(sigLocation.x+24.000000, sigLocation.y+ 8.000000) withFont:[UIFont fontWithName:@"Arial" size:8.0]];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[image setImage:resultingImage];
答案 0 :(得分:3)
问题可能在于用户正在触摸的观点。您可以尝试(如this link中所示)
UITouch * touch = [touches anyObject];
CGPoint pos = [touch locationInView: [UIApplication sharedApplication].keyWindow];
NSLog(@"Position of touch: %.3f, %.3f", pos.x, pos.y);
这应该给出相对于屏幕的触摸位置。