2012-03-21 1 views
1

슬롯 머신 어플 리케이션을위한 다른 방법이 있습니까? 이것은 UIPICKER 메서드가 느린 애니메이션 효과를 가지지 않기 때문입니다.UIPicker의 대안

+0

나는 TableView를 제안합니다. 선택 도구 대신 모든 데이터를로드하고 원하는 데이터를 선택할 수 있습니다. – Hemang

+0

그리고? 스핀 동작을 적용 할 수 있습니까? –

+1

@Kobe 스핀 동작이 필요하지 않습니다. UITableView에서는 가로 스크롤러를 사용할 수 있습니다. 따라서 아무런 제한없이 사용할 수 있습니다. –

답변

3

CALayer 애니메이션을 사용하여 수행 할 수 있습니다.

하위 레이어의 3D 변환을 허용하려면 기본 slotMachineView 레이어의 클래스가 CATransformLayer이어야합니다.

릴에있는 기호를 나타내는 10 개의 정사각형 이미지가 있다고 가정 해 보겠습니다. 각 이미지에 대해 CALayer을 작성하십시오. content 속성은 이미지 중 하나입니다. 이는 당신 '(번역

  • 다음의 X 축에 대해

    • 먼저 각 레이어를 회전해야합니다 (2 * PI)/10 약간의 거리를 그런 다음 각 계층에 당신이 변환을 적용해야합니다 계산할 필요가 있습니다) Z 축 따라.

    이제보기 레이어에이 레이어를 추가하십시오. 이제 X 축을 중심으로 이미지의 "실린더"를 볼 수 있습니다.

    실린더를 회전하려면 첫 번째 변환을 CAAnimation으로 조정하거나 타이머를 사용하고 타이머가 작동하는 오프셋으로 X 축 회전을 조정해야합니다.

    나는 전체 구현 세부 사항을 파악하는 당신에게 그것을 떠날거야 -하지만 여기

    int imageCount = 16; 
    
        for (int i = 0; i < imageCount; i++) { 
         // Load image from the bundle 
    
         NSString * fileName = [NSString stringWithFormat: @"Image-%d", i]; 
         NSString * filePath = [[NSBundle mainBundle] pathForResource: fileName ofType: @"jpeg"]; 
    
         UIImage * image = [UIImage imageWithContentsOfFile: filePath]; 
    
         // Create a layer with the image as content - My image size was 60x60 
    
         CALayer * imageLayer = [CALayer layer]; 
         imageLayer.bounds = (CGRect){CGPointZero, {60.0, 60.0}}; 
         imageLayer.contents = (id)image.CGImage; 
         imageLayer.position = (CGPoint){CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds)}; 
    
         // Set the initial image transform - I've hardcoded the translate along the 
         // z-axis to 150, but this will vary depending on the number of images 
         // and their size - you'll need to do some maths to work it out... sines or 
         // cosines or somesuch 
         CGFloat angle = (2.0 * M_PI)/imageCount * i; 
         CATransform3D transform = CATransform3DMakeRotation(angle, 1.0, 0.0, 0.0); 
         transform = CATransform3DTranslate(transform, 0.0, 0.0, 150.0); 
         imageLayer.transform = transform; 
    
         [self.layers addObject: imageLayer]; 
    
         [self.view.layer addSublayer: imageLayer]; 
        } 
    } 
    

    그것을 회전하려면로드 및 초기 "릴"을 만들 수있는 몇 가지 코드, 당신이해야 할 모든 변화는 변환의 회전 부분 여분의 크레디트를 얻으려면 레이어에서 중심으로 멀어 질수록 그림자가 증가합니다.

  • +0

    그래서 NSArray/NSMutable Array에 이미지를 놓고 레이어를 변형할까요? –

    +0

    좋은 아이디어. UIPickerView는 외부 그래픽과 결합 된 휠의 환상을주기 위해 상단 및 하단에 그림자 그라디언트가있는 것처럼 보입니다. 휠의 숫자/텍스트가 변형되지 않습니다. – bandejapaisa

    +0

    @bandejapaisa 그래서 가장 좋은 방법은 무엇입니까? 캐롤라이나? –

    2

    각 숫자/기호에 UIImageView을 사용할 수 있으며 표시되는 이미지의 움직임을 애니메이션으로 나타낼 수 있습니다. UIPicker을 사용하면 문자와 숫자로 제한됩니다. UIImageView으로 체리와 같은 다른 전형적인 슬롯 머신 영상을 추가 할 수 있습니다.

    +0

    어떻게 스핀 효과를 적용 할 수 있습니까? –

    +1

    @Kobe Core Animation을 적용하는 등 직접 구현해야합니다. 이것은 아마도이 과제의 요점 일 것이다. – dasblinkenlight

    +0

    어디서 UIImageView에 대한 이미지를 저장할 수 있습니까? –

    2

    우리는 숙제를하고 있습니까?

    세로 UIScrollViews를 나란히 사용하고 페이징을 사용 가능하게 설정하고 뷰에 대해 UIImageViews를 사용하십시오.

    기본적으로 플랫하게 보일 것입니다. 그러나 기능면에서는 동일합니다.

    UIPickerView처럼 보이게하려면 약간의 Core Animation/Core Graphics가 필요합니다.

    +0

    예, UIScrollView의 메소드를 호출하여 자동으로 스크롤 할 수 있으며 계속 스크롤 할 수 있습니다. – bandejapaisa

    +0

    UIImageViews에 NSArray/NSMutable Array를 사용할 수 있습니까? 그래서 내 이미지를 저장할 수 있습니까? –

    +0

    예, 배열을 사용할 수 있습니다. – bandejapaisa