4

我正在创建一个 tvOS 应用程序,我想在几个按钮上使用视差图像。从文档

要在您的应用程序中加入视差图像:

  1. 创建一个 UIImage 对象。
  2. 根据图像是否包含在您的应用程序包中或您是否已下载图像,您加载图像的方式会有所不同。
    • Bundle - 使用 imageNamed: 加载图像。
    • 下载的文件 - 使用 imageWithContentsOfFile: 加载图像。
  3. 使用加载的图像创建一个新的 UIImageView 对象。
  4. 如果 UIImageView 是另一个视图的一部分,则在 UIImageView 上将 adjustsImageWhenAncestorFocused 设置为 YES。

我知道它UIImageView在那里说,但我希望在 a 上产生同样的效果UIButton,比如主屏幕应用程序图标。

我已经创建了艺术品,在资产目录中制作了一个堆栈,并使用 加载了图像imageNamed:,但UIButton它的行为不像视差图像。它不会像主屏幕图标那样摇摆。它只是看起来像一个平面图像。

我还必须启用其他什么功能才能使其UIButton表现得像主屏幕应用程序图标?

UIButton* quitGame = [[UIButton alloc] initWithFrame:rectWithNewX(playAgain.frame, 985)];
[quitGame setImage:[UIImage imageNamed:@"quit.lsr"] forState:UIControlStateNormal];
[quitGame setAdjustsImageWhenHighlighted:YES];
fadeIn(quitGame, self.view, 0.5);
4

3 回答 3

5

截至目前,仅使用 UIButtons 是不可能的,但是,我确实找到了解决方法。

相反,创建一个 UIImageView 将填充 UIButton 的大小并使其成为 UIButton 的子视图。然后调用adjustsImageWhenAncestorFocused:并将其设置为true。瞧!

UIButton* playAgain = [[UIButton alloc] initWithFrame:CGRectMake(centerX(650, self.view), sh() - 250, 300, 180)];
[playAgain setAdjustsImageWhenHighlighted:YES];
[playAgain addTarget:self action:@selector(playAgain) forControlEvents:UIControlEventPrimaryActionTriggered];
fadeIn(playAgain, self.view, 0.5);

UIImageView* playAgainIGV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 180)];
[playAgainIGV setImage:[UIImage imageNamed:@"playagain.lsr"]];
[playAgainIGV setAdjustsImageWhenAncestorFocused:YES];
[playAgain addSubview:playAgainIGV];
于 2015-09-23T05:01:59.910 回答
1

我在设置文件或预编译 LSR 时遇到了问题。

通过 Asset Catalog -> New Apple TV Image Stack 在 XCode Asset Catalog 中创建 LSR 并拖入 PNG,然后通过 Interface Builder 或通过以下方式设置图像:

-(void) setLsr:(UIButton *)button lsrNamed:(NSString *)lsr {
    [button setAdjustsImageWhenHighlighted:YES];

    UIImageView *biv = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, button.frame.size.width, button.frame.size.height)];
    [biv setImage:[UIImage imageNamed:lsr]];
    [biv setAdjustsImageWhenAncestorFocused:YES];
    [button addSubview:biv];
}
于 2015-09-23T12:24:35.830 回答
1

关于大卫的回答,我做了一个简单的Swift方法来创建视差效果按钮

func createParallaxButton(button: UIButton, imageNamed: String) {
        button.adjustsImageWhenHighlighted = true
        let buttonBg = UIImageView(image: UIImage(named: imageNamed))
        buttonBg.adjustsImageWhenAncestorFocused = true
        buttonBg.frame = button.bounds
        button.addSubview(buttonBg)
    }
createParallaxButton(myButton, imageNamed: "myButtonimage.lsr")
于 2015-11-27T17:47:00.090 回答