Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS-uibutton的动态放置_Ios_Objective C_Layout_Uibutton - Fatal编程技术网

IOS-uibutton的动态放置

IOS-uibutton的动态放置,ios,objective-c,layout,uibutton,Ios,Objective C,Layout,Uibutton,我有一个奇怪的问题: 我正在ViewDidLoad或VIEWDIDISPENCE中动态设置一些按钮的位置(尝试了两者),并手动设置尺寸。然后,每当按下按钮时,我都会改变按钮的框架。但即使我设置了原来的一个,它们在屏幕上的位置并不相同,但它们看起来有点“向下移动了一些像素”。我附上代码和证书: 视图显示: self.twoTeamsBtn = [[UIButton alloc] init]; self.twoTeamsBtn.frame = CGRectMake(156/2, (9

我有一个奇怪的问题:

我正在ViewDidLoad或VIEWDIDISPENCE中动态设置一些按钮的位置(尝试了两者),并手动设置尺寸。然后,每当按下按钮时,我都会改变按钮的框架。但即使我设置了原来的一个,它们在屏幕上的位置并不相同,但它们看起来有点“向下移动了一些像素”。我附上代码和证书:

视图显示:

    self.twoTeamsBtn = [[UIButton alloc] init];
    self.twoTeamsBtn.frame = CGRectMake(156/2, (94/2), selected2Image.size.width, selected2Image.size.height);
    self.threeTeamsBtn = [[UIButton alloc] init];
    self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), unselected3Image.size.width, unselected3Image.size.height);
    self.fourTeamsBtn = [[UIButton alloc] init];
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2), unselected4Image.size.width, unselected4Image.size.height);
所以,两支球队的得分是94/2(Y),而E是132/2。两幅图像的高度相同。 (selected2与selected3相同,unselected3与unselected3相同,依此类推)

然后在我的单击方法中,我有:

 if (button.tag == self.twoTeamsBtn.tag) {
   self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), self.threeTeamsBtn.frame.size.width, self.threeTeamsBtn.frame.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2), self.fourTeamsBtn.frame.size.width, self.fourTeamsBtn.frame.size.height);
    self.twoTeamsBtn.frame = CGRectMake(156/2, (94/2), selected2Image.size.width, selected2Image.size.height);

    [self.threeTeamsBtn setImage:unselected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:selected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:unselected4Image forState:UIControlStateNormal];

} else if (button.tag == self.threeTeamsBtn.tag) {
    self.threeTeamsBtn.frame = CGRectMake(331/2, (94/2), selected3Image.size.width, selected3Image.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2), self.fourTeamsBtn.frame.size.width, self.fourTeamsBtn.frame.size.height);
    self.twoTeamsBtn.frame = CGRectMake(156/2, (132/2), self.twoTeamsBtn.frame.size.width, self.twoTeamsBtn.frame.size.height);

    [self.threeTeamsBtn setImage:selected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:unselected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:unselected4Image forState:UIControlStateNormal];

} else if (button.tag == self.fourTeamsBtn.tag) {
    self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), self.threeTeamsBtn.frame.size.width, self.threeTeamsBtn.frame.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (94/2), selected4Image.size.width, selected4Image.size.height);

    self.twoTeamsBtn.frame = CGRectMake(156/2, (132/2), self.twoTeamsBtn.frame.size.width, self.twoTeamsBtn.frame.size.height);

    [self.threeTeamsBtn setImage:unselected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:unselected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:selected4Image forState:UIControlStateNormal];

}
截图如下:

因此,如果您在第二张图片中看到,按钮2和按钮4不在同一级别,尽管它们的帧相同。在第三种情况下,2和3处于同一级别

例如,它与原来的132/2相似,与后来的那套不同。

我错过什么了吗

btn1 = [[UIButton alloc] init];
    btn1.frame = CGRectMake(156/2, (94/2), 50, 50);
    btn2 = [[UIButton alloc] init];
    btn2.frame = CGRectMake(331/2, (132/2), 50, 50);
    btn3 = [[UIButton alloc] init];
    btn3.frame = CGRectMake(505/2, (132/2), 50, 50);


    [btn1 setBackgroundColor:[UIColor blackColor]];
    [btn2 setBackgroundColor:[UIColor redColor]];
    [btn3 setBackgroundColor:[UIColor blueColor]];

    [btn1 addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
    [btn2 addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
    [btn3 addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];

    btn1.tag=1000;
    btn2.tag=2000;
    btn3.tag=3000;

    [self.view addSubview:btn1];
    [self.view addSubview:btn2];
    [self.view addSubview:btn3];

将此代码放入ViewDidDisplay或ViewDidLoad中。如果您能够,最好避免更改事物的帧,这将起作用。最好是调整
边界
中心
,然后重新计算

在您的特定示例中,使用以下内容设置
变换
属性的动画更容易:

// animate upwards
btn.transform = CGAffineTransformMakeTranslation(0, -50)

// go back to where it was
btn.transform = CGAffineTransformIdentity
CGAffineTransformity
转换会自动将按钮放回原来的位置,这使得此解决方案非常简单


如果您也要更改按钮的图像,如果可以,最好是确保前后图片的大小相同,可以在两者中较小的图片上添加少量空白。这样你的按钮就不会改变大小,这意味着你不用担心一件事。

我很感激你可能已经找到了答案,多亏了两根稻草,但我认为问题在于你设置框架宽度/高度的方式

if (button.tag == self.twoTeamsBtn.tag) {
    self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), self.threeTeamsBtn.frame.size.width, self.threeTeamsBtn.frame.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2),  self.fourTeamsBtn.frame.size.width, self.fourTeamsBtn.frame.size.height);
    self.twoTeamsBtn.frame = CGRectMake(156/2, (94/2), selected2Image.size.width, selected2Image.size.height);

    [self.threeTeamsBtn setImage:unselected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:selected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:unselected4Image forState:UIControlStateNormal];
} 
对于未选择的图像,您正在将帧设置为之前的大小,但如果选择/未选择的图像大小不同,则最后一个选择的图像(现在未选择的图像)将处于禁用状态。您需要根据正在使用的图像设置帧大小

i、 e


您似乎只是在移动按钮。为了避免此类问题,您是否考虑过仅使用翻译设置
transform
属性的动画?这样回到原始状态只是使用身份转换的问题。@TwoStraws你能给我举个例子吗?即使我正在移动按钮,我也不明白为什么它们没有回到原来的位置,而且它们似乎处于不同的高度?请尝试以下操作:
btn.transform=CGAffineTransformMakeTranslation(0,-50)
然后
btn.transform=CGAffineTransformity
将其放回原处。@TwoStraws如果我也想更改图像,该怎么办?你能不能给我一个完整的答案,这样我也可以接受,如果它有效的话?完成了!如果您想更改图像,则可以,但如果可能,请尝试确保它们的大小相同。这与我上面所说的有什么不同?您正在将图像的大小指定给按钮。未选择的4图像和未选择的2图像大小不同。这就是问题所在
if (button.tag == self.twoTeamsBtn.tag) {
    self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), unselected3Image.size.width, unselected3Image.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2),  unselected4Image.size.width, unselected4Image.size.height);
    self.twoTeamsBtn.frame = CGRectMake(156/2, (94/2), selected2Image.size.width, selected2Image.size.height);

    [self.threeTeamsBtn setImage:unselected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:selected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:unselected4Image forState:UIControlStateNormal];
}