所以我试图在点击后移动UIButton
。
单击按钮后调用_addMoreFields
方法。
_addMoreFieldBtn
是全球UIButton
。当我点击它没有任何反应。
奇怪的是,如果我注释掉addSubView
代码,那么按钮会移动。
如果我保留该代码,则按钮不会移动。
任何想法?
-(void)movePlusButton {
NSLog(@"Moving button");
[UIButton beginAnimations:nil context:nil];
[UIButton setAnimationDuration:0.3];
_addMoreFieldsBtn.center = CGPointMake(30,30);
[UIButton commitAnimations];
}
- (IBAction)addMoreFields:(id)sender {
CGRect currentBtnFrame = [(UIButton *)sender frame];
CGPoint org = currentBtnFrame.origin;
UILabel *whoWasIn = [[UILabel alloc] initWithFrame:CGRectMake(110, org.y, 85, 21)];
whoWasIn.text = @"test";
UITextField *whoWasInField = [[UITextField alloc] initWithFrame:CGRectMake(59, whoWasIn.frame.origin.y+40, 202, 30)];
whoWasInField.placeholder = @"test2";
UILabel *with = [[UILabel alloc] initWithFrame:CGRectMake(136, whoWasInField.frame.origin.y+40, 49, 21)];
with.text = @"with";
whoWasInField.borderStyle = UITextBorderStyleRoundedRect;
UITextField *withField = [[UITextField alloc] initWithFrame:CGRectMake(59, with.frame.origin.y+40, 202, 30)];
withField.placeholder = @"test3";
withField.borderStyle = UITextBorderStyleRoundedRect;
[_homeView addSubview:whoWasIn];
[_homeView addSubview:with];
[_homeView addSubview:whoWasInField];
[_homeView addSubview:withField];
[self movePlusButton];
}
注意:我也尝试过改变框架,但我遇到了同样的问题。它从我放到现有位置的新位置开始制作动画。
答案 0 :(得分:5)
问题是iOS 6 / Xcode 4.5中的新项目默认启用了“Autolayout”。 Autolayout是“Springs and Struts”的替代品(但它仅适用于iOS 6)。此功能为视图添加了约束,该约束优先于您在代码中尝试的移动。
因此,有三种可能的解决方法:
1)以编程方式在按钮上创建新约束。 Autolayout非常强大且灵活......特别是如果你想要支持iPhone 5和早期型号的足迹。您可以通过查看WWDC视频找到有关如何执行此操作的详细信息:Introduction to Auto Layout for iOS and OS X
2)不要使用Autolayout。在故事板中选择一个视图,在文件检查器中,取消选中“使用Autolayout”。
3)为按钮上的每个约束创建IBOutlets。然后在移动按钮之前,删除这些约束:
@interface MyViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *addMoreFieldsBtn;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *hConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *vConstraint;
- (IBAction)addMoreFields:(id)sender;
@end
和...
-(void)movePlusButton {
NSLog(@"Moving button");
[self.view removeConstraint:self.hConstraint];
[self.view removeConstraint:self.vConstraint];
[UIButton beginAnimations:nil context:nil];
[UIButton setAnimationDuration:0.3];
_addMoreFieldsBtn.center = CGPointMake(30,30);
[UIButton commitAnimations];
}
(您需要调用removeConstraints:
的实际视图是按钮的父视图,可能是也可能不是self.view)。
答案 1 :(得分:0)
实际上,我认为发生的事情是您的子视图首先进入屏幕,因此优先,然后一旦子视图被删除,按钮就会移动,如果您更改代码:
[_homeView addSubview:whoWasIn];
[_homeView addSubview:with];
[_homeView addSubview:whoWasInField];
[_homeView addSubview:withField];
[self movePlusButton];
} //移动[self movePlusButton];最多6行代码,或使其成为第一行
[self movePlusButton];
[_homeView addSubview:whoWasIn];
[_homeView addSubview:with];
[_homeView addSubview:whoWasInField];
[_homeView addSubview:withField];
这应解决您的所有问题
:)