Cocoa touch 当从视图触发时,为什么CATTransferM3D不工作?

Cocoa touch 当从视图触发时,为什么CATTransferM3D不工作?,cocoa-touch,xamarin.ios,catransform3d,Cocoa Touch,Xamarin.ios,Catransform3d,在视图中将出现中,我想使用以下转换(Monotouch代码)调整一些视图: 但是,这会导致视图渲染到屏幕最左侧。 如果我将完全相同的代码放入viewdide,则它正在工作。 我已经检查了所有视图的大小是否有效。我不确定我是否完全理解这个问题,但我将进行一次抽签 CATTransformM3D有一个变换引用的消失点。消失点始终是放置变换视图的任何视图的x,y中心点。当我努力解决3D变换问题并获得意外结果时,只要确保我知道容器视图的大小和中心点,就可以解决问题 您说您的代码在ViewDidLoad中

视图中将出现
中,我想使用以下转换(Monotouch代码)调整一些视图:

但是,这会导致视图渲染到屏幕最左侧。 如果我将完全相同的代码放入
viewdide
,则它正在工作。
我已经检查了所有视图的大小是否有效。

我不确定我是否完全理解这个问题,但我将进行一次抽签

CATTransformM3D有一个变换引用的消失点。消失点始终是放置变换视图的任何视图的x,y中心点。当我努力解决3D变换问题并获得意外结果时,只要确保我知道容器视图的大小和中心点,就可以解决问题

您说您的代码在ViewDidLoad中工作……这是否意味着您正在将转换视图添加到基本视图中?比如:this.View.AddSubview(yourTransformedView)


我的意思是,我不认为你的问题是viewwillbeen和ViewDidLoad的问题;我想,如果我看到了将变换应用于视图,然后将视图添加到基本视图或其他超级视图的代码,我将能够很快告诉您发生了什么。

您知道这一点吗?我遇到过类似的情况,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];
}
当然,我不想这样做。这真是一个恶作剧。如果有人遇到过这种情况,并且有更好的解决方案,我很乐意看到


谢谢

我有一个UIViewController。我在这个控制器的视图中添加了一个子视图。对于这个子视图,我应用上面的转换。如果我将上面的代码放在viewDidAppead中,则此转换将按预期工作。然而,如果我把它放在视图中,就会出现不同/错误的结果。我想知道为什么。视图中的AFAIK将显示所有视图都已就位并具有最终尺寸。ViewDidLoad在首次使用ViewController时发生1次。视图将在每次通过(例如)导航离开视图并再次返回时出现。我的建议是,尝试将代码块放置在ViewDidLoad中,作为在ViewDidLoad代码的其他地方移动或更改与基本视图相关的内容时发生的最后一件事。
- (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];
}