我正在使用UICollectionView,并且通过子类定义了一个自定义UICollectionViewCell。该类的初始化程序定义两个视图,如下所示:

    [[NSBundle mainBundle] loadNibNamed:@"ProtelViewCellFlipped" owner:self options:nil];

    CATransform3D transform = CATransform3DMakeRotation(M_PI, 0, 1, 0);
    [flippedView.layer setTransform:transform];
    [flippedView setHidden:YES];
    [self addSubview:flippedView];

    [[NSBundle mainBundle] loadNibNamed:@"ProtelViewCell" owner:self options:nil];
    [self addSubview:selfView];
    [selfView.layer setZPosition:1];

其中flippedView是由“ProtelViewCellFlipped” xib文件定义的视图,而selfView是在“ProtelViewCell” xib文件中定义的视图。视图层次结构是这样的:the view hierarchy http://massimomarra.altervista.org/gerarchia.png

问题是翻转的视图由CATransform3D旋转(就像它是“selfView”视图的另一侧一样),然后被隐藏。没关系,它有效。
selfView视图上有一个UIButton。在视图的右下角。如果我按下该按钮,则会触发此方法:
- (void)infoButtonPressed:(UIButton *)sender
{
    NSString *animationKey = (selfView.layer.zPosition > flippedView.layer.zPosition)? @"forward" : @"backwards";
    CGFloat animationDuration = 0.3;

    if (selfView.layer.zPosition > flippedView.layer.zPosition)
        [self.layer removeAllAnimations];

    CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
    [rotation setValue:animationKey forKey:@"id"];
    rotation.toValue = [NSNumber numberWithFloat:M_PI];
    rotation.duration = animationDuration;
    rotation.removedOnCompletion = NO;
    rotation.fillMode = kCAFillModeForwards;
    [self.layer addAnimation:rotation forKey:animationKey];

    [self performSelector:@selector(flipLayers) withObject:nil afterDelay:animationDuration/2];
}

使self视图随动画一起旋转。另外,在动画过程中会调用此方法:
- (void)flipLayers
{
    [selfView setHidden:!selfView.hidden];
    [flippedView setHidden:!selfView.hidden];

    [selfView.layer setZPosition:flippedView.layer.zPosition];
    [flippedView.layer setZPosition:(1-selfView.layer.zPosition)];
}

因此flippedView变得可见(并且selfView隐藏),并且其图层的zPosition变得比selfView高。

所以现在我看到了flippedView,并且正确显示了它。它也有一个按钮,但是要触发他的动作,我必须轻按另一个位置:flipped view scheme: i have to tap where the button "was" before the rotation http://massimomarra.altervista.org/s03KRJAUk7C_nP3yTXb7TBQ.png

旋转似乎只修改视图的图形,而不修改内容。
你能帮我么?

谢谢大家!

最佳答案

在更改方向之前将按钮转换回身份

像这样的东西:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{

    oneButton.transform=CGAffineTransformIdentity;
}

我不知道为什么,但似乎可行

10-08 15:44