2014-12-26 2 views
3

사용자가 superview를 두드려 감에 따라 UITapGestureRecognizer을 통해이를 감지하고 UIImage보기를 작성하는 함수를 호출하여이를 superview에 추가하고 중력을 추가 한 다음 superview에서 빠져 나오게하십시오.여러 UIImage를 중력에 동시에 떨어 뜨리는 방법은 무엇입니까?

첫 번째 UIImage이 화면에 계속 표시되는 동안 사용자가 다시 탭하면 첫 번째 이미지가 제자리에서 중단되고 두 번째 UIImage이 떨어지기 시작하는 것이 문제입니다. UIImage을 화면에서 독립적으로 떨어 뜨리는 가장 좋은 방법은 무엇입니까?

둘째, 느낌, 내가 거기 탭의 수백이 될 수 있지만 자동으로 즉시 화면의 부족으로 UIImage를 제거하는 방법을 알아낼 질수으로 (메모리를 절약하기 위해 수퍼에서 이러한 UIImage을 제거해야합니다.

제발 신속한에서

도움말.

func dropBall(tapLocation:CGPoint) { 
    let ball = UIImageView(image: UIImage(named: "White50.png")) 
    ball.frame = CGRect(origin: CGPoint(x:tapLocation.x-25,y:tapLocation.y-25), size: CGSize(width:50,height:50)) 
    view.addSubview(ball) 

    animator = UIDynamicAnimator(referenceView: self.view) 
    gravity = UIGravityBehavior(items: [ball]) 
    animator.addBehavior(gravity) 
} 

답변

7

최초의 애니메이션이 중지 이유는 당신이 다시를 호출 할 때, 새 애니메이터를 인스턴스화하고 이전을 발표하는 것입니다. 당신은 한 번만 애니메이터를 인스턴스화해야합니다. 마찬가지로 중력을 한 번만 인스턴스화해야합니다.

보기가 화면에서 벗어난 상태에서 동작을 중지하는 방법 중 하나는 비헤이비어에 action 블록을 추가하고 비헤이비어 항목을 반복하며 각 항목이 화면에 계속 표시되는지 확인한 다음 비헤이비어 목록에서 항목을 제거하는 것입니다 항목이 화면에서 떨어지면 항목을 삭제합니다. =

gravity.addItem(ball) 
+0

을 "애니메이터를 이동하여 .. : 이제

override func viewDidLoad() { super.viewDidLoad() animator = UIDynamicAnimator(referenceView: view) gravity = UIGravityBehavior() gravity.action = { [unowned self] in let itemsToRemove = self.gravity.items.filter() { !CGRectIntersectsRect(self.view.bounds, $0.frame) } for item in itemsToRemove { self.gravity.removeItem(item as UIDynamicItem) item.removeFromSuperview() } } animator.addBehavior(gravity) } 

, 그냥 중력의 행동에 상품을 추가, 항목 중력을 제공하고이보기에서 떨어질 때 자동으로 제거됩니다 .. "라인을보고로드가 끝났습니다. 첫 번째 문제가 해결되었습니다. 이제 모든 볼이 동시에 떨어집니다. 당신이 행동을 추가하는 방법을 설명해 주시겠습니까. – Kashif

+0

그리고 경고 : "애니메이터마다 다중 중력 행동이 정의되지 않았으므로 앞으로 주장 할 수 있습니다." – Kashif

+0

@ user4293473 예, 방금 보았습니다. 따라서 중력을 한 번 추가 한 다음 중력의'items' 배열에 항목을 추가하십시오. 그리고 아이템의'frame'이 더 이상'superview'의'bounds'와 교차하지 않을 때 아이템을 제거하는'action'을 정의하십시오. 수정 된 답변보기 – Rob

관련 문제