我正在创建一个tvOS应用程序,我想在几个按钮上使用视差图像。来自文档:
将视差图像合并到您的应用程序中:
- 创建UIImage对象
- 根据图片是否包含在你的应用程序包中或者你是否下载了的形象。
- 使用imageNamed:.捆绑加载图片
- 下载的文件-加载图像使用imageWithContentsOfFile:.
- 用加载的图片创建一个新的UIImageView对象
- 如果UIImageView是另一个视图的一部分,在UIImageView上设置adjustsimagewhen祖宗聚焦为YES。
我知道那里说的是UIImageView
,但我希望在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);
截至目前,这是不可能的,只是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];
我在设置文件或预编译lsr时遇到了问题。
通过Asset catalog -> New Apple TV Image Stack在XCode Asset catalog中创建LSR,并拖动png,然后通过Interface Builder或通过this works设置图像:
-(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];
}
关于david的回答,我做了一个简单的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")