2010-01-04 2 views
0

나는 이미지의 크기를 서서히 줄이려는 게임을 개발 중입니다. 나는 코드가 잘 작동 할 때 프레임 크기를 점차 줄이고있다. [나는 이미 CGAffineTransform 사용했는데 내 요구 사항에 적합하지 않습니다.]조건 코드가 다르게 작동하기 시작한 후 적용한 후

-(void)function  
{ 
    ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z); 

    if(ravanImage1.center.y>=300&&ravanImage1.center.y<=370) 
    { 
     q=60; 
     z=60; 
     ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z); 
    } 

    if(ravanImage1.center.y>=230&&ravanImage1.center.y<=299) 
    { 
     q=40; 
     z=40; 
     ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z); 
    } 

    if(ravanImage1.center.y>=150&&ravanImage1.center.y<=229) 
    { 
     q=20; 
     z=20; 
     ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z); 
    } 
} 

하지만 wheather를 어느 시점에서 지정하는 동일한 코드를 while 루프를 적용 할 때 그 시점 동안 "(프레임을 감소 중지 도달하지 못했습니다 "), 그렇지 않으면 이미지 프레임 축소가 조금씩 나타나지만 적절한 프레임이있는 끝점에 직접 이미지가 배치됩니다. while 루프가 없으면 조금씩 줄이는 방식으로 표시되기를 원합니다. 예, 디버깅하는 동안 모든 단계를 올바르게 수행합니다. 아무도 도와 주실 수 있습니까?

답변

1

다른 사람들이 지적했듯이 수동으로보기 프레임을 조정하면 성능이 저하 될 수 있습니다. 이 애니메이션은 크기 1에서

CAKeyframeAnimation * customSizeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"bounds.size"]; 
NSArray *sizeValues = [NSArray arrayWithObjects:[NSValue valueWithCGSize:size1], [NSValue valueWithCGSize:size2], [NSValue valueWithCGSize:size3], nil]; 
[customSizeAnimation setValues:frameValues]; 
NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.5f], [NSNumber numberWithFloat:1.0f], nil]; 
[customSizeAnimation setKeyTimes:times]; 
customSizeAnimation.fillMode = kCAFillModeForwards; 
customSizeAnimation.removedOnCompletion = NO; 
[view.layer addAnimation: customSizeAnimation forKey:@"customSizeAnimation"]; 

시작됩니다 : 당신이 정말보기를 변경하기위한 표준의 UIView 애니메이션 블록을 사용하지 않으려면, 당신은 당신의 뷰의 계층에 적용되는 CAKeyframeAnimation를 사용을 통해 애니메이션의 경계를 크기 값을 지정할 수 있습니다 , 애니메이션의 중간 지점에서 size2를 통과하고 size3에서 끝납니다. 애니메이션의 키 프레임 및 시간을 임의로 설정할 수 있으므로 원하는 효과를 얻을 수 있어야합니다.

EDIT (1/5/2010) : 키가 발생할 수있는 kCAAnimationPaced가 calculationMode로 제거되었습니다. 시간을 무시하십시오. 또한 frame was a derived property을 잊어 버렸으므로 경계 크기와 같은 것을 애니메이션으로 만들어야합니다.

+0

소리가 아주 좋아요. 이걸 시도해 보겠습니다. – neha

+0

Brad, 시도해 보았지만 왼쪽 상단 모서리에 첫 프레임이 하나 밖에없는 것을 보여줍니다. 더 큰 y부터 시작하여 각 프레임에서 줄이는 세 개의 CGRect로 프레임을 전달합니다. 대리인 등이 코드에 더 추가해야합니까? 애니메이션을 UIImageView의 레이어에 추가하고 imageView를 자체에 추가했습니다. – neha

+0

그들은 계산 모드가 kCAAnimationPaced로 설정되면 keyTimesarray가 무시된다고 말합니다. – neha

1

이유는 그것이 매우 신속하게 while 루프를 실행하기 때문입니다. 가장 좋은 방법은 while 루프의 각 단계 후에 지연 타이머를 넣는 것입니다. 그러면 각 단계가 표시되고 마지막 단계로 넘어 가지 않습니다.

+0

지연 타이머를 어떻게 적용 할 수 있습니까? 아니면 약간의 지연 후에 동일한 기능을 호출하는 정상적인 타이머를 적용한다는 의미입니까? – neha

+0

이 목표 C로 코딩되어 있습니까? –

+0

예, Tony .. Objective-C로 코딩되어 있습니다. – neha

0
[self setTimer: [NSTimer scheduledTimerWithTimeInterval: 3.5 
                    target: self 
                    selector: @selector (function_name) 
                    userInfo: nil 
                    repeats: YES]]; 

사용해보세요.

+0

은 다음과 같이 선언합니다. NSTimer \t * timer; 그리고 속성을 설정하고 합성합니다. 타이머가 정의되어 있고 setTimer가 기능에서 사용되면 t-> T – Nithin

+0

이미 사용하고 있습니다. 그러나 타이머에서 함수를 지정해야합니다.이 경우에는 동일한 함수입니다.지연 기능을 가진 같은 함수를 호출하면 타이머를 설정하고 예외로 끝나는 모든 것을 실행합니다. 모든 프레임 변경 후 타이머를 설정하고 있습니다. 대신 아이폰 SDK에 지연을 설정하는 기능이 있습니까? – neha

+0

또한, 내 코드는 모두 같은 스레드에서 작동하므로 스레드 지연 메서드가 작동하지 않아서 원하는 전체 코드가 지연됩니다. 난 그냥 전체 코드에서 뭔가를 지연 싶어요. – neha

0

내 '내 이미지 크기를 변경하려고하는 내 이동 기능'입니다. 당신이 오류를 지적 할 수 있다면, 정말 감사합니다 ..

- (무효)]를 initWithImage {

있는 UIImageView * imageViewForAnimation = [[UIImageView에 ALLOC 이동 : [있는 UIImage imageNamed를 : ravan "@. jpg "]];

imageViewForAnimation.alpha = 1.0f; 
CGSize size1=CGSizeMake(60,60); 
CGSize size2=CGSizeMake(40,40); 
CGSize size3=CGSizeMake(20,20); 
CAKeyframeAnimation *customFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"frame"]; 
NSArray *sizeValues = [NSArray arrayWithObjects:[NSValue valueWithCGSize:size1], [NSValue valueWithCGSize:size2], [NSValue valueWithCGSize:size3], nil]; 
[customFrameAnimation setValues:sizeValues]; 
customFrameAnimation.duration=10.0; 
NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.5f], [NSNumber numberWithFloat:1.0f], nil]; 
[customFrameAnimation setKeyTimes:times]; 

customFrameAnimation.fillMode = kCAFillModeForwards;
customFrameAnimation.removedOnCompletion = NO;
[imageViewForAnimation.layer addAnimation : customFrameAnimation forKey : @ "customFrameAnimation"]; [self.view addSubview : imageViewForAnimation]; }

관련 문제