• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

objective-c - super View 旋转后UIButton没有收到触摸

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:18:54 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用 UICollectionView,并且我通过继承该类定义了一个自定义 UICollectionViewCell。类的初始化器定义了两个 View ,就像这样:

    [[NSBundle mainBundle] loadNibNamed"rotelViewCellFlipped" 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"rotelViewCell" owner:self options:nil];
    [self addSubview:selfView];
    [selfView.layer setZPosition:1];

其中flippedView 是“ProtelViewCellFlipped”xib 文件定义的 View ,selfView 是“ProtelViewCell”xib 文件中定义的 View 。 View 层次结构如下:the view hierarchy http://massimomarra.altervista.org/gerarchia.png

问题是翻转的 View 被 CATransform3D 旋转(好像它是“selfView” View 的另一边),然后它被隐藏了。没关系,它有效。

selfView View 上有一个 UIButton。在 View 的右下角。如果我按下那个按钮,这个方法就会被触发:

- (void)infoButtonPressedUIButton *)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 performSelectorselector(flipLayers) withObject:nil afterDelay:animationDuration/2];
}

使 self View 随动画一起旋转。此外,在动画期间调用此方法:

- (void)flipLayers
{
    [selfView setHidden:!selfView.hidden];
    [flippedView setHidden:!selfView.hidden];

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

这样flippedView变得可见(而selfView隐藏),他所在层的zPosition变得高于selfView

所以现在我的 flippedView 可见,并且显示正确。它还有一个按钮,但要触发他的 Action ,我必须点击另一个位置:flipped view scheme: i have to tap where the button "was" before the rotation http://massimomarra.altervista.org/s03KRJAUk7C_nP3yTXb7TBQ.png

似乎旋转只是修改了 View 的图形,而不是内容。 你能帮帮我吗?

提前谢谢大家!!



Best Answer-推荐答案


在改变方向之前将按钮转换回标识

类似这样的:

- (void)willRotateToInterfaceOrientationUIInterfaceOrientation)toInterfaceOrientation durationNSTimeInterval)duration 
{

    oneButton.transform=CGAffineTransformIdentity;
}

我不知道为什么,但它似乎有效

关于objective-c - super View 旋转后UIButton没有收到触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13028734/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap