iPad Air有一个奇怪的问题!,我的代码在iPad 3,iPad 4,iPhone 5S,iPod 5th Gen上运行良好,但在iPad上,我的图像自动滚动而无需用户旋转设备,这是我的代码:
@property (strong,nonatomic) CMMotionManager *motionManager; self.mainScrollView.frame = CGRectMake(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来挑选代码并查看返回的值.
这会将错误处理添加到您的代码中,因为可能会从陀螺仪返回错误,并且这可能返回值> 0.09;在测试时更频繁地使用NSLOG来挑选代码并查看返回的值.
@property (strong,nonatomic) CMMotionManager *motionManager; self.mainScrollView.frame = CGRectMake(0,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 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); }];