zoukankan      html  css  js  c++  java
  • iphone弹出窗口效果的制作(Core animation, CALayer)

    效果类似人人网微薄客户端的弹出效果

    static CGFloat kTransitionDuration = 0.3;
    - (void)initView
    {
        UIWindow *window = [UIApplication sharedApplication].keyWindow;
        if (!window)
        {
            window = [[UIApplication sharedApplication].windows objectAtIndex:0];
        }
        
        _backgroundView = [[UIView alloc] initWithFrame:window.bounds];
        
        // 这个可以使背景变成灰色,类似UIAlertView弹出的效果
       _backgroundView.backgroundColor =  [[UIColor blackColor] colorWithAlphaComponent:0.35];
    
     // 叠加到window上,这样他的父窗口就无法再响应点击消息了.
        [window addSubview:_backgroundView];
        
        self.frame = CGRectMake(10, 60, 300, 380);
        [_backgroundView addSubview:self];
        self.backgroundColor = [UIColor orangeColor];
        
        // 一系列动画效果, 先放大0.1, 在缩小0.1,随后还原原始大小,达到反弹效果
        self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.05, 0.05);
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:kTransitionDuration/1.5];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDidStopSelector:@selector(bounceAnimationStopped)];
        self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1);
        [UIView commitAnimations];
    }
    
    - (void)bounceAnimationStopped {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:kTransitionDuration/2];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDidStopSelector:@selector(bounce2AnimationStopped)];
        self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9);
        [UIView commitAnimations];
    }
    
    - (void)bounce2AnimationStopped {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:kTransitionDuration/2];
        self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);
        [UIView commitAnimations];
    }

    如果想实现圆角的视图:

     CALayer *subLayer = [CALayer layer];
        subLayer.backgroundColor = [UIColor whiteColor].CGColor;
        subLayer.shadowOffset = CGSizeMake(0, 10);
        subLayer.shadowRadius = 5.0;
        subLayer.shadowColor = [UIColor blackColor].CGColor;
        subLayer.shadowOpacity = 0.8;
        subLayer.frame = CGRectMake(30, 30, 150, 190);
        subLayer.cornerRadius = 10;
        subLayer.borderColor =  [[UIColor blackColor] colorWithAlphaComponent:0.75].CGColor;
        subLayer.borderWidth = 4;
        [self.layer addSublayer:subLayer];

    // 如果在层上添加的视图如图片比父视图大,应该试用maskToBounds = YES;

  • 相关阅读:
    windows 10中出现“某个应用导致****文件的默认应用设置出现问题”
    全站仪数据修正为南方cass可识别数据
    用顺序表建立一个简单的可以插入删除的学生成绩管理表
    头插法与尾插法建立单链表
    修改windows下的服务名称
    批处理同时执行多个Ant文件
    Informix数据库中的TO_DATE函数
    Ant发送邮件email
    数据库视图
    Hibernate的三种状态的解释
  • 原文地址:https://www.cnblogs.com/taintain1984/p/3699759.html
Copyright © 2011-2022 走看看