2011-07-27 8 views
5

UIImageView에서 이미지를 아래로 슬라이드하려고합니다. 그러나 UIContentMode와 애니메이션 속성의 조합이 어떻게되는지 알지 못합니다. 이미지의 크기는 항상 같아야하며 줄을 서서는 안됩니다. 원하는 것은 모두 보이고, 아무것도 보이지 않으면 프레임이 확장되어 이미지가 나타납니다.UIView 애니메이션을 아래로 내림

Illustration of my Problem

그래서 오히려 쉽게 들리지만, UIContentMode 내가 UIImageView에 사용해야하는지 내가 무엇 속성에 애니메이션한다 : 당신이 무슨 뜻인지 볼 경우

은 아마 쉽게? 고맙습니다!

+0

애니메이션을 반복해서 표시하지 않고 표시 한 후에 어떻게 추가 할 수 있습니까? 감사. –

답변

8

내가 주도권을 잡았으며 스크린 캐스트도 만들었습니다. Was this what you had in mind?

비디오를 캡처하는 것이 더 쉬워 지도록 애니메이션을 반복적으로 넣었지만 버튼을 누를 때 시작될 수 있으며 반전 될 때까지 팝업 및 그 내용을 표시 할 수 있습니다. 다시 숨겨지기.

CALayer의 마스크 속성을 사용하여 팝업을 숨기고 슬라이딩 애니메이션으로 나타 내기 위해 UIView에 애니메이션을 적용하는 대신 Core Animation을 사용했습니다.

- (void)viewDidLoad 
{ 

    // Declaring the popover layer 
    CALayer *popover = [CALayer layer]; 

    CGFloat popoverHeight = 64.0f; 
    CGFloat popoverWidth = 200.0f; 

    popover.frame = CGRectMake(50.0f, 100.0f, popoverWidth, popoverHeight); 
    popover.contents = (id) [UIImage imageNamed:@"popover.png"].CGImage; 

    // Declaring the mask layer 
    CALayer *maskLayer = [CALayer layer]; 
    maskLayer.frame = CGRectMake(0, - popoverHeight, popoverWidth, popoverHeight); 
    maskLayer.backgroundColor = [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f].CGColor; 

    // Setting the animation (animates the mask layer) 
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"]; 
    animation.byValue = [NSNumber numberWithFloat:popoverHeight]; 
    animation.repeatCount = HUGE_VALF; 
    animation.duration = 2.0f; 

    [maskLayer addAnimation:animation forKey:@"position.y"]; 

    //Assigning the animated maskLayer to the mask property of your popover 
    popover.mask = maskLayer; 

    [self.view.layer addSublayer:popover]; 

    [super viewDidLoad]; 
} 

참고 : 여기에

는 (비디오와 동일) 내가 사용하는 코드입니다 당신은 당신의 프로젝트에 QuartzCore 프레임 워크를 가져오고 헤더 파일에서이 줄을 작성해야합니다 : #import <QuartzCore/QuartzCore.h>합니다.

이 방법이 효과가 있는지 또는 더 이상 설정해야하는지 알려줍니다.

+0

와우, 매우 자세히 답변 해 주셔서 감사합니다! 전에 CALayer를 사용해 본 적이 없지만, 내가 제공 한 코드는 정확히 내가 필요로하는 것입니다. 나는 그걸 가지고 놀거야. – denbec

2

이 코드를 사용해보십시오. UIImageView를 imageView로 간주합니다.

imageView.contentMode = UIViewContentModeScaleAspectFill; 
CGRect imageRect = imageView.frame; 
CGRect origImgRect = imageRect; 
imageRect.size.height = 5; 
imageView.frame = imageRect; 

[UIView animateWithDuration:2.0 
    animations:^{imageView.rect = origImgRect;} 
    completion:^(BOOL finished){ }]; 
+0

이봐, 네가 imageView.frame이 아닌 것 같아. 맞지? 맞지? 그리고 그때 일어나는 일이 [여기] (http://screencast.com/t/e98VLE3if)에서 볼 수 있습니다. 하지만 그것은 단지 전체 그림을 아래로 움직입니다, 나는 그림이 그 자리에 머물러 있기를 원하지만 보이는 영역을 아래로 이동하십시오. – denbec

+0

예, 프레임입니다. 사실 내가하고있는 일은 먼저 화살표만으로 볼 수 있도록 이미지 뷰 프레임의 높이를 5로 설정하는 것입니다. 그런 다음 실제 높이를 애니메이션으로 설정합니다. 나는 여기에있는 것들을 쉽게 디버깅 할 수 있다고 생각한다. – Ilanchezhian

+0

위의 의견에 링크 된 비디오를 체크 아웃 했습니까? 컷 아웃이 아닌 코드 전체가 움직이는 것을 볼 수 있습니다 ... – denbec

관련 문제