ビューコントローラーは横向きのみをサポートしています。メイン ビュー内に白色のビュー (xib の whiteView - IBOutlet) を追加し、whiteview 内に青色の CALayer (blueLayer - クラスのプロパティ) を追加しました。このviewcontrollerでhitTestを実行すると、アプリウィンドウの右側に触れると正しくない結果が返され、左側ではすべて正常に動作します。現在の向きが横向きであるにもかかわらず、アプリが縦向きモードで実行されているかのようです。ポートレートモードではすべて正常に動作します。
以下はコードです。ランドスケープでは、右にタッチするたびに「メインビューでタッチ」が返されます。ランドスケープで正しく機能させるにはどうすればよいですか?
- (void)viewDidLoad
{
[super viewDidLoad];
self.blueLayer = [[CALayer alloc] init];
CGRect frame = self.whiteView.frame;
self.blueLayer.frame = CGRectMake(20.0, 20.0, frame.size.width-40.0, frame.size.height - 40.0f);
self.blueLayer.backgroundColor = [UIColor blueColor].CGColor;
[self.whiteView.layer addSublayer:self.blueLayer];
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"Touch in main view" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
CALayer *touchedLayer = [self.view.layer hitTest:touchPoint];
if(touchedLayer == self.blueLayer){
alertView.message = @"Touch in blue view";
}
else if (touchedLayer == self.whiteView.layer){
alertView.message = @"Touch in white view";
}
else
alertView.message = @"Touch in main view";
[alertView show];
}