2017-04-17 1 views
1

다음은 tutorial에 따라 탭 표시 줄 이미지에 애니메이션을 적용하고 있습니다. 이 유형 UITabBarButtonLabel 아니라있는 UIImageView의 데이터를수록 코드의 주어진 라인은 나를UITabBar 스위프트에서 UIImageView를 가져올 수 없습니다.

secondItemView.subviews.first as! UIImageView 

작동하지 않습니다. 은 내가 enter image description here

secondItemView.viewWithTag(1) 

반환 nil을 태그 값을 사용하여 UIImageView에 얻을 수 있도록 태그 값 1을 추가했습니다. UIImageView의 참조를 얻는 다른 방법은 무엇입니까?

코드

@objc public class MTMainScreenTabsController : UITabBarController { 
var secondItemImageView: UIImageView! 
public override func viewDidLoad() { 
    super.viewDidLoad() 
    let secondItemView = self.tabBar.subviews[0] 


    print(secondItemView.subviews) 
    print(secondItemView.viewWithTag(1)) 

    //self.secondItemImageView = secondItemView.subviews.secon 
    var item: UITabBarItem! = self.tabBar.items![0] 


    //self.secondItemImageView = secondItemView.viewWithTag(1) as! UIImageView 
} 

public override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
} 

public override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
    if item.tag == 1 { 
     self.secondItemImageView.transform = .identity 
     UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseInOut, animations: { 
      () -> Void in 
       //let rotation = CGAffineTransformMakeRotation(CGFloat(M_PI_2)) 
      let rotation = CGAffineTransform.init(rotationAngle: CGFloat(Double.pi/2)) 
       self.secondItemImageView.transform = rotation 
     }, completion: nil) 
    } 
} 

}

+0

탭 표시 줄 태그 1을 지정하고 확인하십시오 –

+0

더 많은 코드로 질문을 업데이트 할 수 있습니까? –

+0

@LuanTran 코드 추가 –

답변

1

도움이 내 코드를 사용하여 미래. 당신이 secondItemView.subviewsUIImageView의 인스턴스를 포함해야하는 경우는 다음과 같이 찾을 수 있습니다 :

let imageView = secondItemView.subviews.flatMap { $0 as? UIImageView }.first 

imageView 변수가 될 것이다 옵션 포함 하나 nil 또는이 형식의 모든 서브 뷰이 있다면 실제 UIImageView. 플랫 맵은 하위 뷰를 반복하고 각각을 캐스팅하려고합니다. UIImageView - 실패하면 결과가 필터링되고, 그렇지 않으면 첫 번째 요소를 가져온 결과 배열에 저장됩니다.

0

이 하나 그것에서 변경 될 수 있으므로 파단의 순서에 따라 엄격하게하는 것이 좋습니다 아니다 당신에게

class AnimatedTabBarController: UITabBarController { 

    var secondItemImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let secondItemView = self.tabBar.subviews[1] 
     self.secondItemImageView = secondItemView.subviews.first as! UIImageView 
     self.secondItemImageView.contentMode = .center 

    } 

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 

     if item.tag == 1{ 
      //do our animations 

      self.secondItemImageView.transform = CGAffineTransform.identity 

      UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: UIViewAnimationOptions(), animations: {() -> Void in 

       let rotation = CGAffineTransform(rotationAngle: CGFloat(M_PI_2)) 
       self.secondItemImageView.transform = rotation 

       }, completion: nil) 
     } 
    } 
} 
관련 문제