您的位置:首页 > 其它

iphone弹出窗口效果的制作(Core animation, CALayer)

2014-04-29 17:31 525 查看
效果类似人人网微薄客户端的弹出效果

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: