在UIButton上使用LSR图像

时间:2015-09-23 02:13:00

标签: objective-c uibutton parallax tvos

我正在创建一个tvOS应用程序,我想在几个按钮上使用视差图像。来自the docs

  

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

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

我知道那里有error,但我希望在UIImageView上发生同样的效果,就像主屏应用图标一样。

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

为了使UIButton的行为与主屏应用图标一样,我还需要启用其他功能吗?

UIButton

3 个答案:

答案 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")