在viewWillAppear
中,我想使用以下转换(Monotouch代码)调整一些观看次数:
CATransform3D oTransform3D = CATransform3D.Identity;
oTransform3D.m34 = 1.0f / -400;
oTransform3D = oTransform3D.Translate( 110, 0, 0);
oTransform3D = oTransform3D.Rotate( (-70f) * (float)Math.PI / 180f, 0, 1, 0);
但是,这会导致视图呈现在屏幕的最左侧。
如果我在viewDidAppear
中添加相同的代码,它就可以了。
我已经检查过所有视图都有有效的大小。
答案 0 :(得分:1)
你有没有想过这个?我遇到了类似的情况,当3D变换应用于UIViewController的根视图的直接子视图时,它拒绝表现。我的解决方法是将子视图包装在另一个容器UIView中。
这些方面的东西:
- (void)viewDidLoad {
[super viewDidLoad];
UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
container.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoResizingFlexibleHeight;
[self.view addSubview:container];
self.myCrazyFlippingSpinningView = [[CrazyFlippingSpinningView alloc] init];
[container addSubview:self.myCrazyFlippingSpinningView];
}
当然,我更愿意不必须这样做。这是一个黑客。如果有人遇到这个并有更好的解决方案,我很乐意看到它。
谢谢!
答案 1 :(得分:0)
我不确定我是否完全理解这个问题,但我会采取赃物。
CATransform3D有一个转换参考的消失点。消失点始终是放置转换视图的任何视图的x,y中心点。当我在3D转换问题上遇到困难并获得意想不到的结果时,它总是通过简单地确定我知道容器视图的大小和中心点来解决。
您说您的代码在ViewDidLoad中有效...这是否意味着您要将转换后的视图添加到基本视图?喜欢:this.View.AddSubview(yourTransformedView); ??
我的意思是,我不认为您的问题是ViewWillAppear与ViewDidLoad的问题;我猜想如果我看到你将转换应用到视图的代码,然后将你的视图添加到基本视图或其他一些超级视图,我就能快速告诉你发生了什么。