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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值