iOS实现应用悬浮窗效果
程序员文章站
2022-06-23 12:18:52
本文实例为大家分享了ios实现应用悬浮窗效果的具体代码,供大家参考,具体内容如下需求在一个app应用的最顶部添加一个悬浮窗,就像ios系统assistivetouch 可以左右滑动,但是最终会停在左边...
本文实例为大家分享了ios实现应用悬浮窗效果的具体代码,供大家参考,具体内容如下
需求
在一个app应用的最顶部添加一个悬浮窗,就像ios系统assistivetouch 可以左右滑动,但是最终会停在左边或右边。
实现思路
在应用的视图的最顶层添加一个uiwindow,用这个uiwindow 充当悬浮窗,给uiwindow添加移动的手势监听,让悬浮窗随着手指移动,释放的时候,让它以动画的方式靠边
代码
//悬浮窗测试 //创建一个悬浮窗口 mwindow = [[assistivetouch alloc]initwithframe:cgrectmake(100, 200, 40, 40) imagename:@"1.png"]; //ios9 window要设置rootview 不然崩溃 uiviewcontroller *controller = [[uiviewcontroller alloc] init]; mwindow.rootviewcontroller = controller; //展示悬浮窗。。 [self.window makekeyandvisible];
//添加移动的手势 uipangesturerecognizer *pan = [[uipangesturerecognizer alloc]initwithtarget:self action:@selector(locationchange:)]; pan.delaystouchesbegan = yes; [self addgesturerecognizer:pan];
//改变位置 -(void)locationchange:(uipangesturerecognizer*)p { //[[uiapplication sharedapplication] keywindow] cgpoint panpoint = [p locationinview:[[uiapplication sharedapplication] keywindow]]; if(p.state == uigesturerecognizerstatebegan) { [nsobject cancelpreviousperformrequestswithtarget:self selector:@selector(changecolor) object:nil]; _imageview.alpha = 0.8; } else if (p.state == uigesturerecognizerstateended) { [self performselector:@selector(changecolor) withobject:nil afterdelay:4.0]; } if(p.state == uigesturerecognizerstatechanged) { self.center = cgpointmake(panpoint.x, panpoint.y); } else if(p.state == uigesturerecognizerstateended) { if(panpoint.x <= kscreenwidth/2) { if(panpoint.y <= 40+height/2 && panpoint.x >= 20+width/2) { [uiview animatewithduration:0.2 animations:^{ self.center = cgpointmake(panpoint.x, height/2); }]; } else if(panpoint.y >= kscreenheight-height/2-40 && panpoint.x >= 20+width/2) { [uiview animatewithduration:0.2 animations:^{ self.center = cgpointmake(panpoint.x, kscreenheight-height/2); }]; } else if (panpoint.x < width/2+15 && panpoint.y > kscreenheight-height/2) { [uiview animatewithduration:0.2 animations:^{ self.center = cgpointmake(width/2, kscreenheight-height/2); }]; } else { cgfloat pointy = panpoint.y < height/2 ? height/2 :panpoint.y; [uiview animatewithduration:0.2 animations:^{ self.center = cgpointmake(width/2, pointy); }]; } } else if(panpoint.x > kscreenwidth/2) { if(panpoint.y <= 40+height/2 && panpoint.x < kscreenwidth-width/2-20 ) { [uiview animatewithduration:0.2 animations:^{ self.center = cgpointmake(panpoint.x, height/2); }]; } else if(panpoint.y >= kscreenheight-40-height/2 && panpoint.x < kscreenwidth-width/2-20) { [uiview animatewithduration:0.2 animations:^{ self.center = cgpointmake(panpoint.x, 480-height/2); }]; } else if (panpoint.x > kscreenwidth-width/2-15 && panpoint.y < height/2) { [uiview animatewithduration:0.2 animations:^{ self.center = cgpointmake(kscreenwidth-width/2, height/2); }]; } else { cgfloat pointy = panpoint.y > kscreenheight-height/2 ? kscreenheight-height/2 :panpoint.y; [uiview animatewithduration:0.2 animations:^{ self.center = cgpointmake(320-width/2, pointy); }]; } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。