e项目总结一活动悬浮框的实现

原创 2016年05月31日 09:13:30

            当时项目正值收尾,公司近期要举办一个投票的推广活动,然后就在首页上加了一个活动悬浮框,点进去后 调得是web端的活动页面 ,接口返回参数为1的时候让悬浮框出现,返回参数为0 的时候,让其消失 ,这是为了避免苹果审核时间过长而造成app上的进度不同 ,由于苹果的唯一识别码已经废弃 所以为了防止刷票 又在 进入活动界面的时候做了个登录提醒,因为账号是绑定手机号的,如果对方有那么多的手机号的话 刷票就由他去吧,也想过采用uuid + keychain 的方式 也就是把uuid由keychain储存,但他的局限性也只是能保证卸载重装的时候   uuid不变 但是刷机和升级系统的时候还是会改变 想想以前自己就是个刷机狂魔,so就将其舍去了。

           悬浮框是放在视图的window上的,当然悬浮框写成个代理……

         mwindow.assistiveDelegate =self;

        self.window = [[UIApplication sharedApplication] keyWindow];

        [self.window addSubview:mwindow];

    又为了悬浮框加了个拖拽功能 效果类似于苹果自带的AssistiveTouch 所以它需要改变位置 以及添加手势

一个拖拽,一个轻拍

  

        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(locationChange:)];

        pan.delaysTouchesBegan = YES;

        [self addGestureRecognizer:pan];

        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(click:)];

        [self addGestureRecognizer:tap];

    }

    

    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1

                                                  target:self selector:@selector(changePos)

                                                userInfo:nil repeats:YES];



//改变位置

-(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];

        _viewAnima.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);

                }];

            }

        }

    }

}

//为了让活动的题目在小的悬浮框上显示出来 就将字体文字做了成跑马灯的效果

- (void) changePos

{

    CGPoint curPos = _customLab.center;

   // NSLog(@"%f",self.customLab.center.x);

    // curPosx坐标已经超过了屏幕的宽度

    if(curPos.x <  -100 )

    {

        CGFloat jianJu = _customLab.frame.size.width/2;

        // 控制蝴蝶再次从屏幕左侧开始移动

        _customLab.center = CGPointMake(self.frame.size.width + jianJu, 20);

        

    }

    else

    {

        // 通过修改ivcenter属性来改变iv控件的位置

        _customLab.center = CGPointMake(curPos.x - 5, 20);

    }

    //其实整个移动都是————iv.center来去设置的

}

又为了只让悬浮框在首界面出现 so就让他在 viewWillAppear:(BOOL)animated上创建,在viewDidDisappear:(BOOL)animated 上remove掉就可以了 这一点要注意下 如果首界面进入下个界面是push出去的话 因为共用导航条 所以有时候在下界面的时候会不走viewDidDisappear:(BOOL)animated的方法 这样如果你频繁调用的话 就会让首界面重复创建悬浮框 这样的话 你就需要在首界面遵守 UINavigationControllerDelegate

然后在协议上加以限制

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

{

    //每次当navigation中的界面切换,设为空。本次赋值只在程序初始化时执行一次

    static UIViewController *lastController = nil;

    

    //若上个view不为空

    if (lastController != nil)

    {

        //若该实例实现了viewWillDisappear方法,则调用

        if ([lastController respondsToSelector:@selector(viewWillDisappear:)])

        {

            [lastController viewWillDisappear:animated];

        }

    }

    

    //将当前要显示的view设置为lastController,在下次view切换调用本方法时,会执行viewWillDisappear

    lastController = viewController;

    

    [viewController viewWillAppear:animated];

}



 




五子棋项目的总结

五子棋游戏的开发早就结束了,最终版本是v1.1。但是总结直到今天才做。这个五子棋项目中,我最满意的,就是那个人工智能算法。提起人工智能,学校里大四时选过这门课,但几乎没有听过,也不知道讲了什么。唯一有...
  • bobojing8841
  • bobojing8841
  • 2006年06月30日 14:04
  • 4305

抽奖项目总结

js快速开发包,首次应用于项目,大大的提高了开发效率,从此再也不怕弹层和分页一类的事情了,很多东西都简单化了,还是要利用空闲时间完善。本次开发中location.href把我折腾死了,在利用locat...
  • sbt0198
  • sbt0198
  • 2015年06月01日 09:52
  • 619

iOS关于悬浮窗口的实现

由于项目的需要,需要实现的一个悬浮窗口 ,显示在整个应用界面。 思路一 另创建一个类 继承 uiwindow 设置成为 alter ,使用 makeKeyAndVisible 显示在界面上, 这种...
  • javaskyhr
  • javaskyhr
  • 2015年06月17日 11:51
  • 2409

活动小负责人的总结

为了今天晚上的英语活动,真的是小忙了几天,现在没什么事了,也没有什么心情学习,所以总结一些这次收获吧。 负责人 把自己弄的很忙,宏观的把控、任务的分配没有处理得很好         可能跟我的...
  • ma15732625261
  • ma15732625261
  • 2017年02月05日 16:55
  • 403

JS实现简单悬浮框

function scall(){  document.getElementById("topdiv").style.top=(document.documentElement.scrollTop)+...
  • seanennn
  • seanennn
  • 2013年01月29日 10:47
  • 1131

JAVA第一阶段总结

JAVA第一阶段总结 一;知识总结      JAVA学习的第一个小的阶段已经学习完了,在第一个阶段中学习了JAVA的语言的介绍,程序的运行环境,JAVA的基本点,变量和常量,基本数据类型,运算符...
  • LS1910831673
  • LS1910831673
  • 2016年11月11日 16:22
  • 655

带你逐步深入了解SSM框架——淘淘商城项目之项目总结

1.  项目总结 总结淘淘商城中用到的技术点: 1.1. 项目工程搭建。 1、使用maven构建工程。Maven的继承、聚合、依赖管理。 2、Svn的使用,svn上传下载代码。 1.2. s...
  • u012469528
  • u012469528
  • 2018年01月03日 21:25
  • 317

抽奖活动开发总结

1. 越早测试越好,打好提前量 2. 使用异步回调
  • JavaLive09
  • JavaLive09
  • 2014年11月06日 11:06
  • 441

总结一次失败的网站项目

今天是十月一,已经是项目结束后的二十天了,那段压抑的时间过去了,也是时候写一下关于整个项目的总结了。        总的来说,这次的项目在我们手中是失败的,时间延迟,工程质量一般,参与人员的劳动强度...
  • eightwhells
  • eightwhells
  • 2012年10月01日 16:12
  • 1065

Intent 实现活动之间的跳转

转载请注明出处:http://blog.csdn.net/mr_leixiansheng/article/details/53558324 步骤: 1、新建要跳转的活动和布局文件 2、在Android...
  • Mr_Leixiansheng
  • Mr_Leixiansheng
  • 2016年12月10日 14:39
  • 761
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:e项目总结一活动悬浮框的实现
举报原因:
原因补充:

(最多只允许输入30个字)