gpt4 book ai didi

ios - 如何在 Xcode 中的 CALayer 上方制作按钮或标签?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:15 26 4
gpt4 key购买 nike

在我的 Storyboard中,我添加了一个按钮和一个标签。在我的 ViewController 中,我以编程方式定义了一个 CALayer 并将其作为子层添加到 ViewController 的 View 中。当我测试应用程序时,子层位于按钮和标签上方,但我想将子层置于按钮和标签下方。


这是代码

.h文件

// The CALayer declaration
CALayer *graphic;

.m文件

//The screen width and height
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
CGFloat screenWidth = screenSize.width;
CGFloat screenHeight = screenSize.height;

//The CALayer definition
graphic = [CALayer layer];
graphic.bounds = CGRectMake(0, 0, screenHeight, screenWidth);
graphic.position = CGPointMake(screenHeight/2, screenWidth/2);
graphic.backgroundColor = [UIColor blackColor].CGColor;
graphic.opacity = 0.1f;
[self.view.layer addSublayer:graphic];

如何使子层(图形)出现在按钮和标签下方?


提前致谢

最佳答案

您可以做的一件事是以编程方式将按钮和标签添加到图层。

编辑

好的,我知道问题出在哪里了。当您添加此行时:[graphic addSublayer:self.btn.layer]; 您的应用程序崩溃了,因为您的按钮已经添加到 View 层次结构中,因为您是使用 Storyboard 创建它的。

我所做的是声明一个新标签和按钮,但没有将其添加到 Storyboard 中(参见评论“A”)。之后,我在 viewDidLoad 方法中实例化了它们,然后将它们添加到您创建的图层中。

警告

我在这里展示的这段代码将有效地在 CALayer 顶部显示您的标签和按钮,但是请记住 CALayer 用于绘图和动画,不用于用户交互。与 UIView 不同,CALayer 不继承自 UIResponder,因此它无法接收 UIView 的触摸收到。

但是,有一个解决方法。除了使用 Target-Action 机制,您还可以使用 Gesture Recognizers 来检测用户的触摸和交互。在这个例子中,我添加了一个简单的 UITapGestureRecognizer 来说明它是如何完成的。每次点击按钮时,控制台中都会显示一条“按钮被点击”消息。

// This is the *.m file
#import "ViewController.h"

@interface ViewController ()

// Comment A. Another label and button added to the class without adding them to the
// storyboard
@property (nonatomic, strong) UIButton *firstButton;
@property (nonatomic, strong) UILabel *mylabel;

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];

self.firstButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.firstButton setTitle:@"Just a Button" forState:UIControlStateNormal];
self.firstButton.frame = CGRectMake(50, 50, 300, 40);
UIGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(theAction:)];
[self.firstButton addGestureRecognizer:tapGesture];

self.mylabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 120, 200, 40)];
self.mylabel.text = @"Hello World";
self.mylabel.backgroundColor = [UIColor cyanColor];

//The screen width and height
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
CGFloat screenWidth = screenSize.width;
CGFloat screenHeight = screenSize.height;

//The CALayer definition
CALayer *graphic = nil;
graphic = [CALayer layer];
graphic.bounds = CGRectMake(0, 0, screenHeight, screenWidth);
graphic.position = CGPointMake(screenHeight/2, screenWidth/2);
graphic.backgroundColor = [UIColor whiteColor].CGColor;
graphic.opacity = 1.0f;
[graphic addSublayer:self.firstButton.layer];
[graphic addSublayer:self.mylabel.layer];
[self.view.layer addSublayer:graphic];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (IBAction)theAction:(id)sender {

NSLog(@"Button Tapped");
}
@end

如果您有更多问题,请告诉我。

希望这对您有所帮助!

关于ios - 如何在 Xcode 中的 CALayer 上方制作按钮或标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com