2014-06-18 4 views
0

내가 만든 UILabel을 가지고 있다면, 화면에서 임의의 지점으로 주기적으로 바뀌게 할 수 있습니까? 내가 arc4random과 같은 무언가를 사용할 것인가, 무작위 CGPointMake와 같은 것을 사용할 것인가?UILabel의 위치를 ​​임의로 변경하려면 어떻게합니까?

나는이

Text = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(RandomText) userInfo:nil repeats:YES] ; 

등의 모든 초 정도 사용하여 뭔가를 변경했을하지만 난 그냥하는 방법을 잘 모르겠어요 그것은 임의의 장소에 "알"가능한 경우에 다음에 다른 하나를 제거하십시오.

단순한 버전이 나옵니다. 방금 4 개의 다른 UILabels를 말하면 어떻게 4 중 하나에 무작위로 나타낼 수 있습니까? 그런 다음 시간 간격 후에 제거 할 수 있습니까? 나는

int randomNumber = rand() % 4; 

같은 것을 사용하고 거기에 스위치를 넣을 수있는 가정,하지만 난 그 중 하나를 할 수있는 올바른 방법이 될 것입니다 있는지 확실하지 않습니다.

답변

0

화면의 다른 지점으로 이동하려는 단일 레이블이 있습니까? 또는 여러 라벨을 추가하고 있습니까?

자동 레이아웃을 사용하고 있습니까? (자동 레이아웃을 사용하는 경우 레이블을 옮길 수는 없지만 대신 위치 제약 조건을 수정해야합니다. 좀 더 복잡해집니다.)

이동 방법에 관해서는 arc4random_uniform을 사용하여 레이블의 중심에 대한 새 위치를 계산하는 것이 좋습니다.

타이머 메소드에 다음과 같은 코드를 넣을 수 있습니다. 아래 코드에서 "보기"는 레이블이 포함 된보기입니다.

아래 코드는 라벨의 너비 반값 인 & 높이보다 가운데보기를 부모보기 가장자리에 더 가깝게 이동하여 라벨을 완전히 볼 수 있도록합니다.

CGFloat newX = arc4random_uniform(view.bounds.width - label.bounds.width) + 
    label.bounds.width/2; 
CGFloat newY = arc4random_uniform(view.bounds.height - label.bounds.height) + label.bounds.height/2; 

label.center = CGPointMake(newX, newY); 

당신은 그것을 이동하는 레이블이 애니메이션 당신이 UIView의 방법 animateWithDuration를 사용할 수있는 새로운 위치합니다 : 애니메이션이 애니메이션 블록에서 중심점을 변경할 수 있습니다.

AutoLayout을 사용하는 경우 센터 X 및 가운데 Y 구속 조건을 콘센트로 연결하고 값 설정을 변경하여 라벨을 이동해야합니다.

+0

좋아요.이 문제와 관련하여 몇 가지 질문이 있습니다. 너비와 높이를 준수하기위한 프레임 워크를 가져와야합니까? 왜냐하면 난 구조체 CGRect에서 "너비"라는 이름의 멤버가 없다는 오류가 생기기 때문입니다. 보기 대신보기 야합니까? 왜냐하면 나에게 오류를 바로 잡으려고하는 동안 오류가 발생하기 때문입니다. 아니면 그냥 그 번호로 바꾸겠습니까? –

+0

나는 당신이 전에 쓴 것을 읽었지 만, 내가보기 부분에 관해서는 autolayout을하고 완전히 확신하지는 못했습니다. –

+0

게시 한 코드에 오타가있었습니다. 이 문제를 해결할 수 있어야합니다. CGRect의 정의는 무엇입니까? 폭 속성이 있습니까? 문서를 살펴보십시오. CGRect에서 검색하고 정의를 살펴보십시오. –

0

흥미 롭습니다. 아마 이것은 도움이 될 것입니다. 이것은 단지 프로토 타입 일뿐입니다. 결코 생산 코드는 아닙니다. 희망이 도움이됩니다. 인스턴스 레벨 변수로 label, screenHeightscreenWidth을 고려하십시오.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 20, 20)]; 
    label.backgroundColor = [UIColor blackColor]; 
    [self.view addSubview:label]; 
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 
            target:self 
           selector:@selector(createRandomPoint:) 
           userInfo:nil 
           repeats:YES]; 
    screenHeight = [UIScreen mainScreen].bounds.size.height; 
    screenWidth = [UIScreen mainScreen].bounds.size.width; 



} 

-(void) createRandomPoint:(id)sender { 
    int randX = arc4random() % screenWidth; 
    int randY = arc4random() % screenHeight; 
    label.center = CGPointMake(randX, randY); 
} 
관련 문제