2016-06-21 1 views
-2

나는 이해가 안 뷰 객체 (있는 UIButton) 에서 상속하는 클래스를 만든 이유는 무엇 성공할 FUNC 초기화 또는로 awakeFromNib에서의 drawRect FUNC에 추가의 backgroundColor를 변경하기 위해 노력하고있어 때 하지만 나는 drawRect func (예 : self.layer.cornerRadius)에 을 추가하는 레이어의 속성을 변경하려고합니다. init 또는 awakeFromNib func에 의해 변경되지 않습니다.IOS - drawRect func 레이어 속성을 변경할 수 없습니까?

두 가지 질문 : 1. 배경 화면에서 어떤 일이 일어 났는지 설명 할 수 있습니까? 2. drawRect func에 추가 된 레이어의 속성을 어떻게 변경할 수 있습니까? 내 흔들리는 영어 에 대한

죄송합니다 나는 분명히 충분히 :) 여기

내 간단한 예제 코드입니다 희망 :의 drawRect에서 추가되었다 내가 레이어의 속성을 변경하는 방법

import UIKit 

class Btn:UIButton { 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder); 
     self.backgroundColor=UIColor.cyanColor(); 
     self.layer.borderWidth=1; 
    } 

    override func awakeFromNib() { 
     self.backgroundColor=UIColor.brownColor(); // it was changed to brown 
     self.layer.borderWidth=3; // it changed to 3 
     self.layer.cornerRadius=20;// it doesn't changed to 20 
     // it's stay 5 from drawRect func (down here) whyyy???    
    } 

    override func drawRect(rect: CGRect) { 
     self.backgroundColor=UIColor.greenColor(); 
     self.layer.cornerRadius=5; 
    } 
} 
+0

나는 그 질문을 이해할 수 없다고 생각합니다. 'drawRect'는'awakeFromNib' 이후에 호출됩니다. 그래서 둘 다 설정한다면'drawRect'는'awakeFromNib'에있는 것을 덮어 쓰려고 할 것입니다 – dan

+0

그래서 backgroundColor는 갈색입니다, 당신의 대답에 따라 drawRect awakeFromNib에서 하나를 덮어 씁니다. 왜 내가 greenColor를 보지 못합니까 ?? –

답변

1

func?

하지 마십시오. drawRect에서 모든 레이어의 속성을 변경하지 말고 drawRect에 레이어를 추가하지 마십시오. drawRect에서 수행해야하는 유일한 작업은 그림보기의 콘텐츠입니다. 이 코드 :

override func drawRect(rect: CGRect) { 
    self.backgroundColor=UIColor.greenColor(); 
    self.layer.cornerRadius=5; 
} 

...이 잘못되었습니다. 그것을 삭제하십시오.

+0

응답 해 주셔서 감사하고 O.K 나는하지 않을 것입니다 ...하지만 당신은 정말로 내 질문에 대답하거나 좋은 설명을하지 않습니다. 코드에서 awakeFromNiv func을 제거했을 때 drawRect func에있는 버튼의 레이어 속성이 설정되고 작동하며 코드를 실행 한 후에 오류가없는 이유는 무엇입니까? –

+0

나는 'awakeFromNib'을 제거하지 않았다. 'awakeFromNib'는 레이어와 배경색으로 뷰를 구성 할 수있는 좋은 곳입니다. 'drawRect'는 그렇지 않습니다. – matt

관련 문제