标签:uibutton label uilabel 游戏 应用
不管在应用中还是游戏中让用户输入数字都是比较麻烦的,首先需要呼出键盘,其次输入数字,最后确认输入,在这么小的屏幕上步骤如此麻烦,假想,如果让用户长按按钮实现数值快速增长和快速减小,那多简单啊,好吧,废话不多说,直接上代码,实现比较简单,不做过多解释(如有不当之处,烦请指出,多谢)
//
// ViewController.m
//
// Created by Hunk on 15/2/12.
// Copyright (c) 2015年 Hunk. All rights reserved.
//
#import "ViewController.h"
#define STAGE_ONE (20)
#define STAGE_TWO (50)
#define STAGE_THREE (100)
#define MINUS_BTN_TAG (99)
#define PLUS_BTN_TAG (101)
@interface ViewController ()
{
UILabel *label;
NSTimer *timer;
NSInteger flag;
NSInteger index;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
index = 1;
flag = 0;
label = [[UILabel alloc] initWithFrame:CGRectMake(50.0, 100.0, CGRectGetWidth(self.view.frame) - 100.0, 60.0)];
[label setBackgroundColor:[UIColor yellowColor]];
[label setFont:[UIFont systemFontOfSize:50.0]];
[label setTextAlignment:NSTextAlignmentCenter];
[label setText:@(index).stringValue];
[self.view addSubview:label];
UIButton *minusButton = [UIButton buttonWithType:UIButtonTypeCustom];
[minusButton setFrame:CGRectMake(0.0, CGRectGetMinY(label.frame), 50.0, CGRectGetHeight(label.frame))];
[minusButton setBackgroundColor:[UIColor redColor]];
[minusButton setTitle:@"-" forState:UIControlStateNormal];
[minusButton.titleLabel setFont:[UIFont systemFontOfSize:50]];
[minusButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[minusButton setTag:MINUS_BTN_TAG];
[self.view addSubview:minusButton];
UILongPressGestureRecognizer *minusLongPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] init];
[minusLongPressGestureRecognizer addTarget:self action:@selector(minusGestureRecognizerAction:)];
[minusLongPressGestureRecognizer setMinimumPressDuration:.5f];
[minusLongPressGestureRecognizer setAllowableMovement:10.0];
[minusButton addGestureRecognizer:minusLongPressGestureRecognizer];
UIButton *plusButton = [UIButton buttonWithType:UIButtonTypeCustom];
[plusButton setFrame:CGRectMake(CGRectGetWidth(self.view.frame) - 50.0, CGRectGetMinY(label.frame), 50.0, CGRectGetHeight(label.frame))];
[plusButton setBackgroundColor:[UIColor greenColor]];
[plusButton setTitle:@"+" forState:UIControlStateNormal];
[plusButton.titleLabel setFont:[UIFont systemFontOfSize:50]];
[plusButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[plusButton setTag:PLUS_BTN_TAG];
[self.view addSubview:plusButton];
UILongPressGestureRecognizer *plusLongPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] init];
[plusLongPressGestureRecognizer addTarget:self action:@selector(plusGestureRecognizerAction:)];
[plusLongPressGestureRecognizer setMinimumPressDuration:.5f];
[plusLongPressGestureRecognizer setAllowableMovement:10.0];
[plusButton addGestureRecognizer:plusLongPressGestureRecognizer];
}
- (void)buttonAction:(UIButton *)button
{
if(MINUS_BTN_TAG == [button tag])
{
index--;
if(index < 1)
{
index = 1;
}
}
else if(PLUS_BTN_TAG == [button tag])
{
index++;
}
[label setText:@(index).stringValue];
}
- (void)minusGestureRecognizerAction:(UILongPressGestureRecognizer *)panGestureRecognizer
{
switch(panGestureRecognizer.state)
{
case UIGestureRecognizerStateBegan:
{
flag = -1;
timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];
}
break;
case UIGestureRecognizerStateChanged:
{
}
break;
case UIGestureRecognizerStateEnded:
{
[timer invalidate];
timer = nil;
}
break;
default:
break;
}
}
- (void)plusGestureRecognizerAction:(UILongPressGestureRecognizer *)panGestureRecognizer
{
switch(panGestureRecognizer.state)
{
case UIGestureRecognizerStateBegan:
{
flag = 1;
timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}
break;
case UIGestureRecognizerStateChanged:
{
}
break;
case UIGestureRecognizerStateEnded:
{
[timer invalidate];
timer = nil;
}
break;
default:
break;
}
}
- (void)updateTimer:(NSTimeInterval)dt
{
if(index > 0 && index < STAGE_ONE)
{
index += (1 * flag);
}
else if(index >= STAGE_ONE && index < STAGE_TWO)
{
index += (5 * flag);
}
else if(index >= STAGE_TWO && index < STAGE_THREE)
{
index += (10 * flag);
}
else
{
index += (50 * flag);
}
if(index < 1)
{
index = 1;
}
[label setText:@(index).stringValue];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
标签:uibutton label uilabel 游戏 应用
原文地址:http://blog.csdn.net/lixuwen521/article/details/45477685