关注 tvOS 上的 UICollectionViewCells

Posted

技术标签:

【中文标题】关注 tvOS 上的 UICollectionViewCells【英文标题】:Focus for UICollectionViewCells on tvOS 【发布时间】:2015-11-23 05:13:24 【问题描述】:

我是 tvOS 的新手。我在 Objective-C 中使用 XIB 文件创建了 UICollectionView。如何聚焦 UICollectionViewCell?

我在单元格中有一个标签和一个图像视图,我想同时关注标签和图像视图。

【问题讨论】:

详细说明你做了什么以及你面临的问题,不要要求教程和解释。 【参考方案1】:

UICollectionViewCell默认不显示焦点,但您可以通过自己添加来实现。

- (void)didUpdateFocusInContext:(UIFocusUpdateContext *)context withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator

    if (self.focused)
    
        // Apply focused appearence,
        // e.g scale both of them using transform or apply background color 
    
    else
    
       // Apply normal appearance
    

如果您只想关注ImageView,比如在集合视图单元格获得焦点时将其放大,您可以在awakeFromNib 方法中这样做

self.imageView.adjustsImageWhenAncestorFocused = YES;
self.clipToBounds = NO;

【讨论】:

应该是 'clipsToBounds'('s' 缺失)。【参考方案2】:

将此添加到collectionview 的自定义类中:

override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator)  
 if (self.focused) 
   collectionView.image.adjustsImageWhenAncestorFocused = true
  else 
   collectionView.image.adjustsImageWhenAncestorFocused = false
  
 

【讨论】:

【参考方案3】:

将以下方法添加到您的 collectionview 单元格。它将显示焦点单元格的标题,仅提供完整的焦点外观。

override func awakeFromNib() 
        super.awakeFromNib()

        // These properties are also exposed in Interface Builder.
        imageView.adjustsImageWhenAncestorFocused = true
        imageView.clipsToBounds = false

        title.alpha = 0.0
    

    // MARK: UICollectionReusableView

    override func prepareForReuse() 
        super.prepareForReuse()

        // Reset the label's alpha value so it's initially hidden.
        title.alpha = 0.0
    

    // MARK: UIFocusEnvironment

    override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) 
        /*
         Update the label's alpha value using the `UIFocusAnimationCoordinator`.
         This will ensure all animations run alongside each other when the focus
         changes.
         */
        coordinator.addCoordinatedAnimations(
            if self.focused 
                self.title.alpha = 1.0
            
            else 
                self.title.alpha = 0.0
            
            , completion: nil)
    

【讨论】:

以上是关于关注 tvOS 上的 UICollectionViewCells的主要内容,如果未能解决你的问题,请参考以下文章

tvOS 上的 UIViewControllerTransitioningDelegate 未被调用

tvOS 上的 GCDWebServer

更改 tvOS 上的菜单栏位置

SwiftUI - tvOS 上的 AVPlayerViewController 全屏

在 TVOS 上的 SwiftUI 布局中苦苦挣扎

SwiftUI - tvOS 上的列表 - 顶部渐变