菜鸟教程小白 发表于 2022-12-12 23:18:54

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


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

<pre><code>    [ loadNibNamed:@&#34;ProtelViewCellFlipped&#34; owner:self options:nil];

    CATransform3D transform = CATransform3DMakeRotation(M_PI, 0, 1, 0);
    ;
    ;
    ;

    [ loadNibNamed:@&#34;ProtelViewCell&#34; owner:self options:nil];
    ;
    ;
</code></pre>

<p>其中flippedView 是“ProtelViewCellFlipped”xib 文件定义的 View ,selfView 是“ProtelViewCell”xib 文件中定义的 View 。 View 层次结构如下:<a href="http://massimomarra.altervista.org/gerarchia.png" rel="noreferrer noopener nofollow">the view hierarchy http://massimomarra.altervista.org/gerarchia.png</a> </p>

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

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

<pre><code>- (void)infoButtonPressed:(UIButton *)sender
{
    NSString *animationKey = (selfView.layer.zPosition &gt; flippedView.layer.zPosition)? @&#34;forward&#34; : @&#34;backwards&#34;;
    CGFloat animationDuration = 0.3;

    if (selfView.layer.zPosition &gt; flippedView.layer.zPosition)
      ;

    CABasicAnimation *rotation = ;
    ;
    rotation.toValue = ;
    rotation.duration = animationDuration;
    rotation.removedOnCompletion = NO;
    rotation.fillMode = kCAFillModeForwards;
    ;

    ;
}
</code></pre>

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

<pre><code>- (void)flipLayers
{
    ;
    ;

    ;
    ;
}
</code></pre>

<p>这样<code>flippedView</code>变得可见(而<code>selfView</code>隐藏),他所在层的zPosition变得高于<code>selfView</code>。</p >

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

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

<p>提前谢谢大家!!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在改变方向之前将按钮转换回标识</p>

<p>类似这样的:</p>

<pre><code>- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{

    oneButton.transform=CGAffineTransformIdentity;
}
</code></pre>

<p>我不知道为什么,但它似乎有效</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c -superView 旋转后UIButton没有收到触摸,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/13028734/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/13028734/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - super View 旋转后UIButton没有收到触摸