2014-09-05 16 views
5

Tôi đang thêm UIView vào chế độ xem của SKScene. Sau đó, khi tôi muốn loại bỏ rằng UIView hình thức superview của nó, bằng cách sử dụng phương pháp tiêu chuẩn của uiview.removeFromSuperview dường như không hoạt động. Tôi nên hoàn thành điều này như thế nào? Đây là cách tôi thêm các UIView:removeFromSuperview không hoạt động cho UIView được thêm vào SKScene

func addContainerView() { 

    let containerRect = CGRectMake(400, 24, 600, 720) 
    smallerView = UIView(frame: containerRect) 
    smallerView.backgroundColor = UIColor.redColor() 
    self.view.addSubview(smallerView) 
} 

đây là cách tôi đang cố gắng để xoá bỏ nó:

func removeContainerView() { 

    smallerView.removeFromSuperview() 
} 

này tất cả diễn ra trong lớp SKScene, vì vậy đây 'tự' đề cập đến cảnh . Bất kỳ suy nghĩ nào?

+0

Bạn thực sự thêm nó vào 'self.view', là' SKView' –

+0

Cảm ơn @AndreyGordeev, đây là một quan sát thú vị, khá đúng, nhưng tôi không chắc nó ảnh hưởng như thế nào đến vấn đề của tôi. SKView kế thừa từ UIView và vì vậy việc xóa các bản xem phụ phải hoạt động theo cách tương tự, đúng không? – zeeple

+0

Điều này làm việc tốt cho tôi. Phải có cái gì đó khác khiến nó ở trên màn hình. Tôi đã thêm một khung nhìn trong khi viewDidLoad trong khuôn mẫu SceneKit và loại bỏ nó trong phương thức handleTap và mọi thứ hoạt động như mong đợi. – bjtitus

Trả lời

1

Trước hết, tôi tự hỏi bạn đang sử dụng phiên bản nhanh nào.

self.viewtùy chọn trong 1,2 vì thế bạn nên gõ: self.view?.addSubview() nếu bạn đang nhắm mục tiêu nhanh chóng 1.2

Tôi đã cố gắng trong nhanh chóng 1.2 để tạo ra một ứng dụng đơn giản

class GameScene: SKScene { 

    let subview = UIView() 

    override func didMoveToView(view: SKView) { 

    subview.frame = CGRectMake(0, 0, 100, 100) 
    subview.backgroundColor = SKColor.orangeColor() 
    self.view?.addSubview(subview) 
    } 

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    removeContainerView() 
    } 

    func removeContainerView() { 
    subview.removeFromSuperview() 
    } 
} 

Các công trình mã trên rất tốt. tôi có thể nghĩ đến một vài lý do quan điểm của bạn không bị loại bỏ

  1. Bạn có chắc chắn rằng removeContainerView là thực sự gọi. Hãy thử tạo điểm dừng để xem liệu nó có được gọi là
  2. Nếu bạn đã thiết lập SKView của mình bằng mã, có thể thiết lập đã bị lỗi.
  3. subview của bạn đang được deallocated hoặc một cái gì đó

Để gỡ lỗi hoàn toàn vấn đề của bạn, chúng tôi cần phải nhìn thấy một số mã khác.

gì chúng ta cần là:

  1. Tuyên bố của subview bạn
  2. Tất cả các chức năng mà gọi removeContainerView()

Thậm chí tốt hơn sẽ được pastebin lớp SKScene của bạn.

Các vấn đề liên quan