gpt4 book ai didi

ios - 陀螺仪滚动图像有问题

转载 作者:可可西里 更新时间:2023-11-01 03:21:06 25 4
gpt4 key购买 nike

我的 iPad Air 有一个奇怪的问题!!! ,我的代码在 iPad 3、iPad 4、iPhone 5S、iPod 5th Gen 上运行良好,但在 iPad air 上,我的图像会自动滚动而无需用户旋转设备,这是我的代码:

 @property (strong, nonatomic) CMMotionManager *motionManager;


self.mainScrollView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);

self.mainScrollView.bounces = NO;


self.mainScrollView.userInteractionEnabled = NO;

//set up the image view
UIImage *image= [UIImage imageNamed:@"YOUR_IMAGE_NAME"];
UIImageView *movingImageView = [[UIImageView alloc]initWithImage:image];
[self.mainScrollView addSubview:movingImageView];

self.mainScrollView.contentSize = CGSizeMake(movingImageView.frame.size.width, self.mainScrollView.frame.size.height);


self.mainScrollView.contentOffset = CGPointMake((self.mainScrollView.contentSize.width - self.view.frame.size.width) / 2, 0);

//inital the motionManager and detec the Gyroscrope for every 1/60 second
//the interval may not need to be that fast
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.gyroUpdateInterval = 1/60;

//this is how fast the image should move when rotate the device, the larger the number, the less the roation required.
CGFloat motionMovingRate = 4;

//get the max and min offset x value
int maxXOffset = self.mainScrollView.contentSize.width - self.mainScrollView.frame.size.width;
int minXOffset = 0;

[self.motionManager startGyroUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMGyroData *gyroData, NSError *error) {

if (fabs(gyroData.rotationRate.y) >= 0.1) {
CGFloat targetX = self.mainScrollView.contentOffset.x - gyroData.rotationRate.y * motionMovingRate;

if(targetX > maxXOffset)
targetX = maxXOffset;
else if (targetX < minXOffset)
targetX = minXOffset;


self.mainScrollView.contentOffset = CGPointMake(targetX, 0);
}
}];

这是一种动画!!!此代码在其他设备上工作正常!有帮助吗?谢谢

最佳答案

您可以尝试以下操作吗:这会将错误处理添加到您的代码中,因为陀螺仪可能会返回错误,这可能会返回一个 >0.09 的值;在测试时更频繁地使用 NSLOG 来分离代码并查看返回的值。

@property (strong, nonatomic) CMMotionManager *motionManager;


self.mainScrollView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);

self.mainScrollView.bounces = NO;


self.mainScrollView.userInteractionEnabled = NO;

//set up the image view
UIImage *image= [UIImage imageNamed:@"YOUR_IMAGE_NAME"];
UIImageView *movingImageView = [[UIImageView alloc]initWithImage:image];
[self.mainScrollView addSubview:movingImageView];

self.mainScrollView.contentSize = CGSizeMake(movingImageView.frame.size.width, self.mainScrollView.frame.size.height);


self.mainScrollView.contentOffset = CGPointMake((self.mainScrollView.contentSize.width - self.view.frame.size.width) / 2, 0);

//inital the motionManager and detec the Gyroscrope for every 1/60 second
//the interval may not need to be that fast
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.gyroUpdateInterval = 1/60;

//this is how fast the image should move when rotate the device, the larger the number, the less the roation required.
CGFloat motionMovingRate = 4;

//get the max and min offset x value
int maxXOffset = self.mainScrollView.contentSize.width - self.mainScrollView.frame.size.width;
int minXOffset = 0;

[self.motionManager startGyroUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMGyroData *gyroData, NSError *error) {
// IF NO ERROR ---
if(!error){
NSLog(@"No error from Gyroscope %f",gyroData.rotationRate.y);
if (fabs(gyroData.rotationRate.y) >= 0.1) {
NSLog(@"Moving image");
CGFloat targetX = self.mainScrollView.contentOffset.x - gyroData.rotationRate.y * motionMovingRate;

if(targetX > maxXOffset)
targetX = maxXOffset;
else if (targetX < minXOffset)
targetX = minXOffset;


self.mainScrollView.contentOffset = CGPointMake(targetX, 0);
}
}
// ERROR returned from GYRO
else NSLog(@"error recieved %@",error);
}];

关于ios - 陀螺仪滚动图像有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24374367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com