将UILabel滑动到alpha 0

时间:2014-01-15 19:48:48

标签: ios cocoa-touch

我有一个标签,我想“滑动删除”。我想要的是:

  • 如果用户触摸标签,并开始将其拖动到右侧,则标签随手指一起移动
  • 标签向右移动得越多,得到的alpha越少
  • 当它达到alpha 0时,触发方法。

知道实现这个的最佳方法是什么?

提前致谢!

2 个答案:

答案 0 :(得分:2)

您需要使用UIPanGestureRecognizer来执行此操作。当手势识别器启动时,您将需要跟踪起点。你还需要定义一些可以平移的数量,这一数字一直被认为是。当平移发生时,您将看到触摸移动了多远并将标签移动了该量。您还将确定通过“一直到”距离移动的方式的百分比,并相应地设置alpha。

到达现场后,您可以取消手势识别器(将其enabled属性设置为NO)并执行您想要执行的任何操作。如果用户释放他们的触摸(因此手势识别器在他们完全拖动之前结束),您显然希望在此时重置标签位置和alpha。

您可能还需要考虑平移结束时的速度,如果它超过一定的速度,请继续使其以该速度继续动画到完成状态,否则如果速度不快足够,让它回到起始状态。但是,在您最初实施它之后,您可能只想打扰它,看看您是否想要这个。

答案 1 :(得分:0)

将它放在你的UIViewController中。

警告 :我在没有XCode的情况下输入了所有内容,但从未对其进行过测试。您可能需要修复拼写错误并调整数字。

// Declare this in the anonymous category of your UIViewController
@property(nonatomic, strong) UILabel* label;
- (void)didSwipeLabel:(UISwipeGestureRecognizer*)swipe;
- (void)willRemoveLabel;

// Put the following in the usual places in .m file
- (void)viewDidLoad {
    [super viewDidLoad];
    self.label = [UILabel alloc] init];
    self.label.font = [UIFont boldSystemFontOfSize:30.0];
    self.label.text = @"SWIPE THIS LABEL TO CHANGE THE ALPHA";
    [self.label sizeToFit];
    [self.label addGestureRecognizer:[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeLabel:)]];
    [self.view addSubview:self.label];
}

- (void)didSwipeLabel:(UISwipeGestureRecognizer*)swipe
{
    // The value of 0.1 needs to be adjusted. Most likely it needs
    // to be decreased.
    if (swipe.direction == UISwipeGestureRecognizerDirectionRight) {
        self.label.alpha = self.label.alpha - 0.1;
    } else if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {
        self.label.alpha = self.label.alpha + 0.1;
    }

    if (self.label.alpha <= 0.0) {
        [self willRemoveLabel];
    }
}

- (void)willRemoveLabel
{
    NSLog(@"label should be removed");
}