Ios 动画不';行不通
我对动画有问题。 问题是,如果我尝试为已经创建的视图设置动画,一切都会顺利进行,如果我尝试在动画不起作用的同时创建视图并为其设置动画 有人能帮我吗 我的方法Ios 动画不';行不通,ios,animation,layer,Ios,Animation,Layer,我对动画有问题。 问题是,如果我尝试为已经创建的视图设置动画,一切都会顺利进行,如果我尝试在动画不起作用的同时创建视图并为其设置动画 有人能帮我吗 我的方法 + (LoginView *)sharedInstance { @synchronized(self) { if (nil == _sharedInstance) { _sharedInstance = (LoginView *)[[[NSBundle mainBundle] loadNibN
+ (LoginView *)sharedInstance {
@synchronized(self) {
if (nil == _sharedInstance) {
_sharedInstance = (LoginView *)[[[NSBundle mainBundle] loadNibNamed:@"LoginView" owner:nil options:nil] objectAtIndex:0];
}
}
return _sharedInstance;
}
- (void)hide:(BOOL)value animated:(BOOL)animated {
CATransition * animation = [CATransition animation];
animation.type = kCATransitionFade;
[animation setDuration:1.0];
if(_autoManageModalView)
[animation setDelegate:self];
[[self layer] removeAllAnimations];
[[self layer] addAnimation:animation forKey:kCATransition];
self.hidden = value;
}
我怎么称呼他们
[[LoginView sharedInstance] hide:NO animated:YES];
第一次(同一次呼叫)动画不起作用,从第二次开始一切顺利。提前感谢 视图的生命周期过早地设置了动画。理论上,您可以创建一个视图,然后将其显示在某个位置(例如,
addSubview:
),然后为其设置动画
很有可能,尽管我没有检查它,第一次调用hide:animated:
方法时,self.layer
属性为null;在任何情况下,动画都会发生在视图显示之前,因此您将看不到它
总之,首先显示视图,然后对其调用hide:animated:
方法
在您的评论之后:尝试通过以下方法调用hide:animated:
方法:
performSelector:withObject:afterDelay:
如果指定0.0延迟,这将在主循环中将调用hide:animate:
排入队列,以便可以进行与loadNibNamed:
相关的所有处理,从而为视图提供正确设置显示的时间
要使用
performSelect:withObject:afterDelay:
,您需要修改方法签名,使其包含一个参数,并且该参数必须是NSObject派生类型,而不是基元类型 您在哪里显示视图?例如执行addSubview:[LoginView sharedInstance]
或其他操作?a)将其添加为视图或子视图的位置不可见,并且“同时创建和设置视图动画”不清楚b)您的单例实例可能设置为零,并且reallocated@A-Live-A)在默认情况下是隐藏的(我将其设置为“awakeFromNib”方法)。“同时创建和设置视图动画”意味着第一次调用hide方法时,我的应用程序将创建LoginView的新实例,并在创建结束时开始动画;第二次LoginView已经创建,因此无需创建,只能显示。B) 为什么我不能使用singleton?@sergio-我在创建视图时显示视图(在awakeFormNib方法中)。@Marco Pace当然可以,但考虑到多线程的使用,您最好确保它的安全。请检查我的编辑,您可能需要调用性能选择器:withObject:afterDelay:
。非常感谢,它工作得非常完美——我学到了更多!最后:问题不在于我的self.layer为null,而是(经过一些阅读之后)每个UI方法都像“performSelector”方法上的包装器。在五月的案例中,我做了一个“hidden=no”,所以它是在动画结束后在我的方法结束时执行的。执行“performSelector”操作时,将动画放在hidde=no之后的队列中,因此它起作用:-)