我正在使用 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 文件中定义的视图。视图层次结构是这样的:视图层次结构 http://massimomarra.altervista.org/gerarchia.png
问题是翻转的视图被旋转了(好像它是“selfView”视图的另一边)CATransform3D
,然后它被隐藏了。没关系,它有效。
视图上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
可见的,它显示正确。它还有一个按钮,但要触发他的动作,我必须在另一个位置点击:翻转视图方案:我必须在旋转之前点击按钮“是”的位置 http://massimomarra.altervista.org/s03KRJAUk7C_nP3yTXb7TBQ.png
似乎旋转只是修改了视图的图形,而不是内容。你能帮我么?
提前谢谢大家!!