デバイスの向きに応じて、いくつかのカスタムサイズパラメータをUIViewに設定する必要があります。次のように、独自のビューコントローラを持たないUIViewをロードします。
main.hで
@property (nonatomic, retain) IBOutlet UIView *socialActionView;
main.mで
@synthesize socialActionView;
。。。
socialActionView = [[[NSBundle mainBundle] loadNibNamed:@"SocialActionViewController" owner:self options:nil] objectAtIndex:0];
[self.view addSubview:socialActionView];
もう必要ない場合は、スーパービューから削除します
[self.socialActionView removeFromSuperview];
NSLog(@"%@",self.socialActionView.superview);
削除後、ログには(null)と表示されます
私がこのように行うサイズ調整
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if ((self.interfaceOrientation == UIDeviceOrientationPortrait) || (self.interfaceOrientation == UIDeviceOrientationPortraitUpsideDown)){
if (self.socialActionView != NULL) {
[self.socialActionView setBounds:CGRectMake(0, 0, 320, 480)];
[self.socialActionView setCenter:CGPointMake(160, 240)];
[self.scroll1 setContentSize:CGSizeMake(320, 600)];
[self.scroll1 setBounds:CGRectMake(0, 0, 320, 428)];
[self.scroll1 setCenter:CGPointMake(160, 266)];
}
} else if((self.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (self.interfaceOrientation == UIDeviceOrientationLandscapeRight)){
if (self.socialActionView != NULL) {
[self.socialActionView setBounds:CGRectMake(0, 0, 480, 320)];
[self.socialActionView setCenter:CGPointMake(240, 160)];
[self.scroll1 setContentSize:CGSizeMake(480, 600)];
[self.scroll1 setBounds:CGRectMake(0, 0, 480, 268)];
[self.scroll1 setCenter:CGPointMake(240, 186)];
}
}
}
メインビューからサブビュー(socialAcitonView)を削除しない限り、これまでのところ問題なく動作します。その後、self.socialActionViewにアクセスできなくなります。私はここでstackoverflowのような多くの例を見てきました
-(IBAction)showPopup:(id)sender {
if(![[self myView] isDescendantOfView:[self view]]) {
[self.view addSubview:[self myView]];
} else {
[[self myView] removeFromSuperview];
}
また
-(IBAction)showPopup:(id)sender
{
if (!myView.superview)
[self.view addSubview:myView];
else
[myView removeFromSuperview];
}
また
if (!([rootView subviews] containsObject:[self popoverView])) {
[rootView addSubview:[self popoverView]];
} else {
[[self popoverView] removeFromSuperview];
}
また
-(IBAction)showPopup:(id)sender {
if([[self myView] superview] == self.view) {
[[self myView] removeFromSuperview];
} else {
[self.view addSubview:[self myView]];
}
}
しかし、それらのどれも機能しません。デバッガーは常にアクセス不良の例外原因をスローします。(私の観点から)オブジェクトがもう存在しないことを意味するもの。しかし、スーパービューから削除して(null)と言った後、ロガーはどのようにアクセスできますか?
ビューに専用のビューコントローラーを指定し、didRotateFromInterfaceOrientationを配置したほうがよいので、socialActionViewが存在するかどうかを確認する必要はありません。とにかく、UIViewをチェックする方法があるかどうかを尋ねたいと思います(null)かどうか。すべてのコードをview/viewcontrollerのカップルに変更する前に。
ヒントをいただければ幸いです。