adi*_*dit 2 iphone objective-c ipad ios
我有一个自定义init方法:
- (id) initWithFrame:(CGRect ) frame andImage:(UIImage *) image
{
self = [super init];
if (self){
self.view.frame = frame;
self.imageView_.image = image;
self.imageScrollView_.frame = self.view.frame;
imageOriginalFrame = frame;
zoomedImageFrame = frame;
NSLog(@"SCREEN DIM %f AND %f", zoomedImageFrame.size.height, zoomedImageFrame.origin.y);
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
这是我如何呈现它:
FullSizeImageViewController * fullSize = [[FullSizeImageViewController alloc] initWithFrame:imageOriginalFrame andImage:image];
if ([self.delegate respondsToSelector:@selector(fullStoryViewController:presentModalViewController:animated:)]) {
[self.delegate fullStoryViewController:self presentModalViewController:fullSize animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
但是,令人惊讶的是我的viewDidLoad在initWithFrame之前被调用.这怎么可能?
我猜这是因为我打电话给超级初始化?如果不是我该怎么做?
你的viewDidLoad
方法是没有得到所谓的之前你initWithFrame:andImage:
的方法.您的viewDidLoad
方法在您的initWithFrame:andImage:
方法中被调用.
您的initWithFrame:andImage:
方法包含以下行:
self.view.frame = frame;
Run Code Online (Sandbox Code Playgroud)
这是简写:
[[self view] setFrame:frame];
Run Code Online (Sandbox Code Playgroud)
所以你的方法是调用-[UIViewController view]
方法.该-[UIViewController view]
方法基本上是这样的:
- (UIView *)view {
if (!_view) {
[self loadView];
[self viewDidLoad];
}
return _view;
}
Run Code Online (Sandbox Code Playgroud)
尝试在viewDidLoad
方法中添加断点.当它被击中时,查看堆栈跟踪.你会发现initWithFrame:andImage:
它.
归档时间: |
|
查看次数: |
1317 次 |
最近记录: |