我试图用加速度计移动图像:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
image.center = CGPointMake(acceleration.x, acceleration.y);
}
当我测试应用程序时,应该移动的图像只是位于x0 y0位置。
我宣布加速度计,称为.h UIAccelerometerDelegate等等......
我做错了什么?
提前致谢! -DD
答案 0 :(得分:6)
您确实意识到加速度计会返回,如名称所示,加速度测量值不是显示屏上的点?无论如何,你需要做的是改变中心(不是完全替换它),这将允许你移动图像。
这些方面的东西:
image.center = CGPointMake(image.center.x + acceleration.x,
image.center.y - acceleration.y);
同样重要的是要注意加速度通常保持在-1和1之间(除非用户摇动设备),这是由于重力为1G。因此,您应该将acceleration.x和.y值乘以一些常量,以使图像移动速度比一次大约1点快。
您应该考虑其他一些事项,如果图像位于屏幕边缘会怎么样?如果用户想要在平面以外的其他位置使用应用程序(需要校准加速度计),该怎么办?
答案 1 :(得分:0)
-(void)moveImage:(id)sender
{
[operationView bringSubviewToFront:[(UIPanGestureRecognizer*)sender view]];
[[[(UIPanGestureRecognizer*)sender view] layer] removeAllAnimations];
CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.view];
if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan)
{
firstX = [[sender view] center].x;
firstY = [[sender view] center].y;
[imgDeleteView setHidden:FALSE];
}
else if ([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
{
[imgDeleteView setHidden:TRUE];
}
translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);
[[(UIPanGestureRecognizer *)sender view] setCenter:translatedPoint];
}