我需要将带有参数@"willAnimateRotationToInterfaceOrientation"
和toInterfaceOrientation
(问题#1 )的通知duration
发送给应用程序上的所有UIViewController
(问题#2 )。如何为此编写代码?
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(willAnimateRotationToInterfaceOrientation:toInterfaceOrientation:duration)
name:@"willAnimateRotationToInterfaceOrientation"
object:nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"willAnimateRotationToInterfaceOrientation"
object:self];
答案 0 :(得分:19)
使用postNotificationName:object:userInfo:
并捆绑您希望在userInfo
词典中传递的所有参数。
示例:
您可以发布此类通知
NSDictionary * userInfo = @{ @"toOrientation" : @(toOrientation) };
[[NSNotificationCenter defaultCenter] postNotificationName:@"willAnimateRotationToInterfaceOrientation" object:nil userInfo:userInfo];
然后通过执行以下操作检索您传递的信息:
- (void)willAnimateRotationToInterfaceOrientation:(NSNotification *)n {
UIInterfaceOrientation toOrientation = (UIInterfaceOrientation)[n.userInfo[@"toOrientation"] intValue];
//..
}
总结一下上面看到的内容,用于处理通知的选择器采用类型为NSNotification
的一个可选参数,您可以存储您想要在userInfo
字典中传递的任何信息。 / p>
答案 1 :(得分:1)
这不会像你想象的那样奏效。通知消息调用有一个可选参数,即NSNotification
对象:
-(void)myNotificationSelector:(NSNotification*)note;
-(void)myNotificationSelector;
通知对象具有属性userInfo
,该属性是可用于传递相关信息的字典。但是您无法注册通知中心要调用的任意选择器。您使用-postNotificationName:object:userInfo:
代替-postNotificationName:object:
通知该字典; userInfo
参数只是您创建的NSDictionary
。
答案 2 :(得分:0)
你做一个更容易调用的方法,它需要较少的参数,并为你做复杂的调用。
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(doStuff)
name:@"willAnimateRotationToInterfaceOrientation"
object:nil];
- (void)doStuff {
[self willAnimateRotationToInterfaceOrientation:someOrientation
toOrientation:someOtherOrientation
duration:1];
}
你不应该自己打电话给willAnimateRotationToInterfaceOrientation:
。而是创建一个名为form的方法,该方法包含要在旋转时激活的代码以及其他时间。