gpt4 book ai didi

ios - 使用 CMMotionManager 使图像环绕屏幕边缘?

转载 作者:可可西里 更新时间:2023-11-01 06:15:04 26 4
gpt4 key购买 nike

我想要完成的是将 UIImageView 移动到 iPhone 屏幕的顶部边缘,然后继续向上移动它,但是一旦图像通过顶部边缘,它就会出现在屏幕底部,因为它继续移动通过。也让向右和从右向左

它将通过 Accelerometer 和 UISwipeGesture 移动我使用了两个相同的图像但无法正常工作如果有人有例子,请分享

一张图片有可能吗?

enter image description here

如果有人知道这个任务,请告诉我。

谢谢。

最佳答案

使用加速度计

你必须使用两个相同的图像

我在这里使用 1) _imageView 2) _imgViewTemp

         - (void)startUpdateAccelerometer:(UIImageView*)ImgView1 view:(UIView*)boundView
{
if ([self.mManager isAccelerometerAvailable] == YES) {
// self.mManager.accelerometerUpdateInterval = 1.0/10000.0;
[self.mManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error)
{
CGRect imgFrame = _imageView.frame;

if(isWindowActive){

imgFrame.origin.x -=accelerometerData.acceleration.y*8.0 ;

if(!CGRectContainsRect(self.view.bounds, imgFrame))
imgFrame.origin.x = _imageView.frame.origin.x;

imgFrame.origin.y -=accelerometerData.acceleration.x *8.0;
if(!CGRectContainsRect(self.view.bounds, imgFrame))
imgFrame.origin.y = _imageView.frame.origin.y;
_imageView.frame = imgFrame;

}
else{
imgFrame.origin.x -=accelerometerData.acceleration.y*8.0 ;
imgFrame.origin.y -=accelerometerData.acceleration.x *8.0;
if(CGRectContainsRect(boundView.frame, _imageView.frame)){

_imgViewTemp.hidden=YES;
}
_imageView.frame=imgFrame;
if ((_imageView.frame.origin.y>_bounderView.frame.size.height-_imageView.frame.size.height && _imageView.frame.origin.x>_bounderView.frame.size.width-_imageView.frame.size.width) ){
NSLog(@"-x hidden");
_imageView.frame=CGRectMake(_imageView.frame.origin.x, 0, _imageView.frame.size.width, _imageView.frame.size.height);
_imgViewTemp.frame=CGRectMake(_imgViewTemp.frame.origin.x, 0,_imageView.frame.size.width, _imageView.frame.size.height);
return ;
}
else if ((_imageView.frame.origin.y>_bounderView.frame.size.height-_imageView.frame.size.height && _imageView.frame.origin.x<0) ){
NSLog(@"-x hidden");
_imageView.frame=CGRectMake(_imageView.frame.origin.x, 0,_imageView.frame.size.width, _imageView.frame.size.height);
_imgViewTemp.frame=CGRectMake(_imgViewTemp.frame.origin.x, 0, _imageView.frame.size.width, _imageView.frame.size.height);
return ;
}
else if (_imageView.frame.origin.y<0 && _imageView.frame.origin.x>_bounderView.frame.size.width-_imageView.frame.size.width) {
_imageView.frame=CGRectMake(_imageView.frame.origin.x, _bounderView.frame.size.height-_imageView.frame.size.height,_imageView.frame.size.width, _imageView.frame.size.height);
_imgViewTemp.frame=CGRectMake(_imgViewTemp.frame.origin.x,_bounderView.frame.size.height-_imageView.frame.size.height,_imageView.frame.size.width, _imageView.frame.size.height);
return ;

}else if (_imageView.frame.origin.y<0 && _imageView.frame.origin.x<0) {
_imageView.frame=CGRectMake(_imageView.frame.origin.x, _bounderView.frame.size.height-_imageView.frame.size.height, _imageView.frame.size.width, _imageView.frame.size.height);
_imgViewTemp.frame=CGRectMake(_imgViewTemp.frame.origin.x,_bounderView.frame.size.height-_imageView.frame.size.height,_imageView.frame.size.width, _imageView.frame.size.height);
return ;
}
else if (imgFrame.origin.x<0) {
if (imgFrame.origin.x<-_imageView.frame.size.width) {
NSLog(@"less 70");
_imgViewTemp.hidden=YES;
_imageView.frame=_imgViewTemp.frame;
}else{
_imgViewTemp.hidden=NO;
_imgViewTemp.frame=CGRectMake(_bounderView.frame.size.width+imgFrame.origin.x, imgFrame.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}
}
else if (imgFrame.origin.x>_bounderView.frame.size.width-_imageView.frame.size.width){
if (imgFrame.origin.x>_bounderView.frame.size.width) {
_imgViewTemp.hidden=YES;
_imageView.frame=_imgViewTemp.frame;
}else{
_imgViewTemp.hidden=NO;
_imgViewTemp.frame=CGRectMake(-(_bounderView.frame.size.width-imgFrame.origin.x), imgFrame.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}
}
else if (imgFrame.origin.y<0){
if (imgFrame.origin.y<-_imageView.frame.size.height) {
_imgViewTemp.hidden=YES;
_imageView.frame=_imgViewTemp.frame;

}else{
_imgViewTemp.hidden=NO;
_imgViewTemp.frame=CGRectMake(imgFrame.origin.x,_bounderView.frame.size.height+imgFrame.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}
}
else if (imgFrame.origin.y>_bounderView.frame.size.height-imgFrame.size.height){
if (imgFrame.origin.y>_bounderView.frame.size.height) {
_imgViewTemp.hidden=YES;
_imageView.frame=_imgViewTemp.frame;
}else{
_imgViewTemp.hidden=NO;
_imgViewTemp.frame=CGRectMake(imgFrame.origin.x,-(_bounderView.frame.size.height-imgFrame.origin.y), _imageView.frame.size.width, _imageView.frame.size.height);
}
}

}
}];
}
}

使用定时器

   NSTimer  *timer = [NSTimer scheduledTimerWithTimeInterval:0.004 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];


-(void)timerFired:(NSTimer *)timerData{

UIImageView *imgView=_imageView;//firstimage
NSInteger Xpos=imgView.frame.origin.x;
NSInteger Ypos=imgView.frame.origin.y;
if (movingPostion==Left) {
Xpos-=1;
}
if (movingPostion==Right) {
Xpos+=1;
}
if (movingPostion==Up) {
Ypos-=1;
}
if (movingPostion==Down) {
Ypos+=1;
}

imgView.frame = CGRectMake(Xpos, Ypos, _imageView.frame.size.width, _imageView.frame.size.height);
CGRect imgFrame = imgView.frame;
_imageView.frame=imgFrame;
if ((imgFrame.origin.y<0 && imgFrame.origin.x<0) || (imgFrame.origin.y<0 && imgFrame.origin.x>_bounderView.frame.size.width-_imageView.frame.size.width)) {
imgFrame.origin.y=_bounderView.frame.size.height+imgFrame.origin.y;
_imageView.frame=imgFrame;
return;
}else if((imgFrame.origin.y >_bounderView.frame.size.height && imgFrame.origin.x<0 ) || (imgFrame.origin.y>_bounderView.frame.size.height && imgFrame.origin.x>_bounderView.frame.size.width)){
imgFrame.origin.y=-(_bounderView.frame.size.height-imgFrame.origin.y);
_imageView.frame=imgFrame;
return;
}
else if (imgFrame.origin.x<0 ) {
if (imgFrame.origin.x<-_imageView.frame.size.width) {
_imgViewTemp.hidden=YES;
_imageView.frame=_imgViewTemp.frame;
}else{
_imgViewTemp.hidden=NO;
_imgViewTemp.frame=CGRectMake(_bounderView.frame.size.width+imgFrame.origin.x, imgFrame.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}
}
else if (imgFrame.origin.x>_bounderView.frame.size.width-_imageView.frame.size.width){
if (imgFrame.origin.x>_bounderView.frame.size.width) {
_imgViewTemp.hidden=YES;
_imageView.frame=_imgViewTemp.frame;
}else{
_imgViewTemp.hidden=NO;
_imgViewTemp.frame=CGRectMake(-(_bounderView.frame.size.width-imgFrame.origin.x), imgFrame.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}
}
else if (imgFrame.origin.y<0){

if (imgFrame.origin.y<-_imageView.frame.size.height) {
_imgViewTemp.hidden=YES;
_imageView.frame=_imgViewTemp.frame;

}else{
_imgViewTemp.hidden=NO;
_imgViewTemp.frame=CGRectMake(imgFrame.origin.x,_bounderView.frame.size.height+imgFrame.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}
}
else if (imgFrame.origin.y>_bounderView.frame.size.height-imgFrame.size.height ){
if (imgFrame.origin.y>_bounderView.frame.size.height) {
_imgViewTemp.hidden=YES;
_imageView.frame=_imgViewTemp.frame;
}else{
_imgViewTemp.hidden=NO;
_imgViewTemp.frame=CGRectMake(imgFrame.origin.x,-(_bounderView.frame.size.height-imgFrame.origin.y), _imageView.frame.size.width, _imageView.frame.size.height);
}


}

关于ios - 使用 CMMotionManager 使图像环绕屏幕边缘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24036881/

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