菜鸟教程小白 发表于 2022-12-13 17:03:25

ios - 自定义 View 上的 AirPlay 按钮 - 问题


                                            <p><p>我正在使用 MPMoviePlayerController 开发支持 AirPlay 的 iPhone 应用程序。但是,我需要在我的自定义 View 中显示这个 AirPlay 按钮。因此,我采用 MPVolumeView 并将其添加到我的自定义 View 中;从 MPVolumeView 中删除了除 AirPlay 按钮之外的所有 subview 。</p>
<p>问题是:</p>
<ol>
<li><p>我可以更改音量 View 的框架,使其适合 AirPlay 按钮大小的自定义 View 的角落吗?我知道可以以编程方式处理这个问题;这样做是否有效?链接<a href="https://stackoverflow.com/questions/5174204/customize-the-airplay-buttons-appearance" rel="noreferrer noopener nofollow">Customize the Airplay button&#39;s appearance</a>提到我们不应该改变 AirPlay 按钮的形状和位置。</p>
</li>
<li><p>我需要将自定义图像设置为 AirPlay 按钮,以使其在美学上与我的自定义 View 相匹配。我该怎么做?</p>
</li>
<li><p>只要不存在带有 AirPlay 的设备,AirPlay 按钮就会从 MPVolumeView 中消失。按钮消失时是否有任何通知?当 AirPlay 按钮不存在时,我需要调整我的自定义 View 。有什么方法可以识别 AirPlay 按钮是否存在? MPVolumeView subviews 数组有这个按钮,即使在 MPVolumeView 中不显示也不处于隐藏状态。</p>
</li>
</ol></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>你应该看看这个答案:<a href="https://stackoverflow.com/questions/5174204/customize-the-airplay-buttons-appearance/7929151#7929151" rel="noreferrer noopener nofollow">Customize the Airplay button&#39;s appearance</a> </p>

<p>这与我的回答基本相同,但更详细。我认为它回答了你的大部分问题。 </p>

<p>为了您的方便,把它粘贴在这里:</p>

<hr/>

<p>在接受@Erik B 的回答并将赏金授予他之后,我发现需要进行更多调整才能使其正常工作。我在这里发帖是为了 future 的 SO 搜索者。</p>

<p>我看到的问题是按钮的内部机制会根据当前的播放状态分配图像。因此,如果 Airplay 接收器消失或状态以某种方式改变,我在初始化期间所做的任何自定义都不会保留。为了解决这个问题,我在按钮的 <code>alpha</code> 键上设置了一个 KVO 观察。我注意到按钮总是淡入/淡出,这是 <code>alpha</code> 上的动画。</p>

<pre><code>MPVolumeView *volumeView = [ initWithFrame:CGRectZero];
;
for (UIButton *button in volumeView.subviews) {
    if (]) {
      self.airplayButton = button; // @property retain
       forState:UIControlStateNormal];
      ;
      ;
    }
}
;
</code></pre>

<p>然后我观察按钮 <code>alpha</code> 的变化值。 </p>

<pre><code>- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if (] &amp;&amp; [ intValue] == 1) {
      [(UIButton *)object setImage: forState:UIControlStateNormal];
      [(UIButton *)object setBounds:CGRectMake(0, 0, kDefaultIconSize, kDefaultIconSize)];
    }
}
</code></pre>

<p>如果你销毁按钮,别忘了移除观察者</p>

<pre><code>- (void)dealloc {
    ;
    …
}
</code></pre>

<p>根据代码观察,如果 Apple 更改 <code>MPVolumeView</code> 的内部 View 层次结构以添加/删除/更改 View ,从而出现不同的按钮,则按钮将中断。这使得它有点脆弱,所以使用风险自负,或者想出一个计划 b,以防发生这种情况。我已经在生产中使用它一年多了,没有任何问题。如果您想查看它的实际效果,请查看 <a href="http://ambianceapp.com/iphone" rel="noreferrer noopener nofollow">Ambiance</a> 中的主播放器屏幕</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 自定义 View 上的 AirPlay 按钮 - 问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/5388884/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/5388884/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 自定义 View 上的 AirPlay 按钮 - 问题