我正在创建一个tvOS应用程序,我想在几个按钮上使用视差图像。来自the docs:
在您的应用中加入视差图像:
- 创建UIImage对象。
- 根据图片是否包含在您的应用包中或是否已下载图片,您的加载方式会有所不同 图片。
- 使用imageNamed捆绑加载图片:。
- 下载的文件 - 使用imageWithContentsOfFile加载图像:。
- 使用加载的图像创建一个新的UIImageView对象。
- 如果UIImageView是另一个视图的一部分,请在UIImageView上将adjustsImageWhenAncestorFocused设置为YES。
醇>
我知道那里有error
,但我希望在UIImageView
上发生同样的效果,就像主屏应用图标一样。
我已经创建了艺术作品,在资产目录中制作了一个堆栈,并使用UIButton
加载了图片,但imageNamed:
的行为不像是视差图像。它不像主屏幕图标那样摇摆不定。它看起来像一个平面图像。
为了使UIButton
的行为与主屏应用图标一样,我还需要启用其他功能吗?
UIButton
答案 0 :(得分:5)
截至目前,仅使用UIButton是不可能的,但是,我确实找到了解决方法。
相反,创建一个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];
答案 1 :(得分:1)
我在设置文件或预编译的LSR时遇到了问题。
通过资产目录在XCode资产目录中创建LSR - >新的Apple TV图像堆栈并在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];
}
答案 2 :(得分:1)
关于david的答案我制作了一个简单的 Swift 方法来创建视差效果按钮</ strong>:
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")