您的帖子不是很清楚,但我相信您正在尝试复制 UIKeyboard 的按钮缩放功能。
如果是这种情况,那么这里有几个简单的步骤来实现这一点。
为按钮添加自定义操作,用于控制状态“向上触摸”和“向下触摸”。
我可能会在viewDidAppear 中执行此操作,这样您就不会阻塞运行循环,直到一切都完成移动到位。也许稍微延迟执行此操作甚至可能是有益的。如下所示在循环中执行此操作将允许您自动将这些操作添加到主视图的子视图数组中“UIButton”类的每个对象。
for (UIButton *button in self.view.subviews) {
if ([button isKindOfClass:[UIButton class]]) {
[button addTarget:self action:@selector(anyButtonDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(anyButtonUp:) forControlEvents:UIControlEventTouchUpInside];
}
}
我们将使用 touch down 方法来缩放按钮,并在内部进行 touch up 以将按钮返回到其原始状态,然后将按钮文本值附加到文本字段的末尾。
为了这个例子,我使用了UILabel。
注意这些方法,我们使用UIButton 作为参数,以便可以转换调用此操作的按钮的转换,而无需为每个按钮创建操作。
- (void)anyButtonDown:(UIButton *)sender
{
[self.view bringSubviewToFront:sender];
[UIView animateWithDuration:0.1 animations:^{
[sender setTransform:CGAffineTransformConcat(CGAffineTransformMakeScale(1.3, 1.3), CGAffineTransformMakeTranslation(0, -25))];
}];
}
在这里,我们将“发送者”的变换调整为释放按钮时的原始变换。此动画是使用完成处理程序创建的,当按钮完成动画返回其原始状态时,允许为该按钮指定的文本附加到当前位于标签中的文本的末尾。
注意:为此,我假设您已输入按钮所代表的字母为按钮的textLabel。
- (void)anyButtonUp:(UIButton *)sender
{
[UIView animateWithDuration:0.1 animations:^{
[sender setTransform:CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, 1.0), CGAffineTransformMakeTranslation(0, 0))];
}completion:^(BOOL done){
[textLabel setText:[textLabel.text stringByAppendingString:sender.titleLabel.text]];
}];
}