我创建了一个带有UILabel和UIButton的小型自定义UIView,这个自定义视图是一个显示在当前视图控制器顶部的横幅。
我从nib文件加载视图布局,并使用自定义视图中的方法显示动画,并且视图将在特定时间后隐藏。像这样。
- (void)displayBannerInViewController:(UIViewController *)vc
{
CGFloat originY = 0;
if (vc.navigationController != nil) {
originY += 20 + vc.navigationController.navigationBar.bounds.size.height - self.bounds.size.height;
}
self.frame = CGRectMake(0,
originY,
[UIScreen mainScreen].bounds.size.width,
self.bounds.size.height);
if (vc.navigationController != nil) {
[vc.navigationController.view insertSubview:self atIndex:1];
} else {
[vc.view.window insertSubview:self atIndex:1];
}
[UIView animateWithDuration:0.3 animations:^{
self.frame = CGRectOffset(self.frame, 0, self.bounds.size.height);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3 delay:self.duration options:0 animations:^{
self.frame = CGRectOffset(self.frame, 0, -self.bounds.size.height);
} completion:^(BOOL finished) {
if (finished) {
[self removeFromSuperview];
}
}];
}];
}
我使用此
为横幅内的按钮设置了操作[self.actionButton addTarget:self
action:@selector(executeActionBlock)
forControlEvents:UIControlEventTouchUpInside];
在显示横幅的动画之后,隐藏之前,无论我点击按钮多少次,都不会调用executeActionBlock
方法。
我做了一个测试,将横幅的初始帧设置为原点(0,0),没有动画,然后按钮工作正常。所以,我不知道动画的问题或横幅的原始框架是否处于不可见的位置。 BTW,对于横幅不可见非常重要,因为应用程序正在导航栏下方显示。
由于
答案 0 :(得分:0)
您已编写代码,以便运行一系列动画,其中视图在上一个动画延迟期间显示在屏幕上。默认情况下,对视图进行动画处理时禁用用户交互。尝试在所有嵌套动画的选项中传递UIViewAnimationOptionAllowUserInteraction。
答案 1 :(得分:0)
好吧,似乎我应该继续寻找更多,因为我发现this question有同样的问题。我在那里尝试了解决方案,现在正在工作。
问题在于链接动画对于用户交互不是一个好主意,所以我使用了NSTimer,就像这样。
- (void)displayBannerInViewController:(UIViewController *)vc
{
CGFloat originY = 0;
if (vc.navigationController != nil) {
originY += 20 + vc.navigationController.navigationBar.bounds.size.height - self.bounds.size.height;
}
self.frame = CGRectMake(0,
originY,
[UIScreen mainScreen].bounds.size.width,
self.bounds.size.height);
if (vc.navigationController != nil) {
[vc.navigationController.view insertSubview:self atIndex:1];
} else {
[vc.view.window insertSubview:self atIndex:1];
}
[UIView animateWithDuration:0.3 animations:^{
self.frame = CGRectOffset(self.frame, 0, self.bounds.size.height);
} completion:^(BOOL finished) {
[NSTimer scheduledTimerWithTimeInterval:self.duration target:self selector:@selector(hideBanner) userInfo:nil repeats:NO];
}];
}
- (void)hideBanner
{
[UIView animateWithDuration:0.3 animations:^{
self.frame = CGRectOffset(self.frame, 0, -self.bounds.size.height);
} completion:^(BOOL finished) {
if (finished) {
[self removeFromSuperview];
}
}];
}
现在就像一个魅力。