如何在iOS中单击按钮(单击该按钮周围的区域)显示大按钮

时间:2012-09-06 02:59:47

标签: iphone ios uibutton uitapgesturerecognizer

我为键盘做了很多按钮。当我点击一个按钮时,它显示为一个大按钮。没有点击按钮,它是否可以显示为大按钮?(如iPhone)你能给出一些示例代码吗?

就像你在这张照片中看到的那样(默认的),我只是点击按钮附近/周围,而不是直接按钮,但它在文本字段中显示字母!如何设置按钮周围区域的条件?

without clicking button

2 个答案:

答案 0 :(得分:0)

你指的是按钮的大图像是否显示在突出显示的按钮顶部,如键盘?

如果是这样,我会考虑为UIControlStateTouchDown设置一个动作,以查看按钮突出显示的时间,并最终在按下的按钮顶部添加更大的按钮图像。然后,为UIControlStateTouchUpInside,UIControlStateTouchUpOutside和UIControlStateTouchCancel添加一个动作,以删除较大的按钮图像。

要跟踪较大的按钮图像,您可以使用属性并跟踪它。我建议继承子类UIButton,我认为你正在使用你的按钮,并为其较大的按钮图像添加一个属性,以便更大的按钮图像与它位于顶部的按钮相关联。

答案 1 :(得分:0)

您的帖子不是很清楚,但我相信您正在尝试复制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];
    }
}

我们将使用触摸按下方法来缩放按钮,并在内部触摸以将按钮恢复到其原始状态,然后将按钮文本值附加到文本字段的末尾。

为了这个例子,我使用了UILabel

注意这些方法我们使用UIButton作为参数,这样就可以转换名为this action的按钮的转换,而无需为每个按钮创建一个动作。

- (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]];
    }];
}