2014-01-15 3 views
0

"삭제하려면 스 와이프"하고 싶은 레이블이 있습니다. 내가 원하는 것은 : 사용자가 라벨을 접촉하고, 오른쪽으로 드래그 시작UILabel을 알파 0으로 스 와이프

  • 경우 레이블은 손가락
  • 오른쪽에있는 더 라벨 움직임을 덜 알파를 함께 ​​이동 gets
  • 알파 0에 도달하면 메서드를 발생시킵니다.

어떤 아이디어를 구현하는 가장 좋은 방법은 무엇입니까? 사전에

감사합니다!

+0

처음 부분에서는 탭 제스처 인식기와 드래그 제스처 인식기가 작동한다고 생각합니다. 기능을 사용하려면 누릅니다. 드래그하여 알파의 위치를 ​​변경하고 사라지게하십시오. –

답변

2

이렇게하려면 UIPanGestureRecognizer을 사용하는 것이 좋습니다. 제스처 인식기가 시작되면 시작 지점을 추적하고 싶을 것입니다. 끝까지 고려해야 할 금액을 정의 할 수도 있습니다. 냄비가 생기면 터치가 얼마나 멀리 움직 였는지 알게되고 그 양만큼 라벨을 옮깁니다. 또한 "전체 끝까지"거리를 통해 이동 한 경로의 비율을 결정하고 이에 따라 알파를 설정합니다.

지점에 도달하면 제스처 인식기 (enabled 속성을 NO으로 설정)를 취소하고 그 시점에서 원하는대로 수행 할 수 있습니다. 사용자가 손을 떼면 (제스처 인식기가 끝나기 전에 끝나기 때문에) 분명히 그 위치에서 라벨 위치와 알파를 재설정하고 싶을 것입니다.

팬이 끝날 때의 속력을 고려하고 특정 속도 이상인 경우 계속 진행하여 해당 속력으로 완료 상태로 계속 애니메이트하도록 할 수 있습니다. 빠르면 시작 상태로 되돌려 놓습니다. 그러나 이것을 원한다면 먼저 구현 한 후에는이 작업에만 신경 써야 할 수도 있습니다.

+0

+1을 고려해 볼 때 – sooper

+0

Thx! 그 트릭을 ;-) 않았다 – CyberK

0

이것을 UIViewController에 넣으십시오.

경고 : 나는 엑스 코드없이이 모든 것을 입력하고 그것을 테스트하지 않았다. 맞춤법 오류를 수정하고 번호를 조정해야 할 수도 있습니다.

// 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"); 
} 
+0

좋아요. 라벨 위에 문지르면 사용자의 손가락으로 라벨을 움직일 수 있습니까? – CyberK

+0

'self.label.frame = CGRectMake (self.label.frame.origin.x + 10.0, self.label.frame.origin.y, self.frame.size.width, self.frame.size.height);' @Gavin은 UISwipeGestureRecognizer 대신 UIPanGestureRecognizer를 사용하는 것이 옳습니다. 이 코드를 사용하려면 코드를 조정해야합니다. 그것은 아주 비슷해야합니다. – Pwner