Program Tip

UIView에 알파를 설정하면 발생하지 않아야하는 하위 뷰에 알파가 설정됩니다.

programtip 2020. 10. 6. 18:57
반응형

UIView에 알파를 설정하면 발생하지 않아야하는 하위 뷰에 알파가 설정됩니다.


문서에 따르면 UIVIew @property(nonatomic) CGFloat alpha

이 속성의 값은 0.0에서 1.0 사이의 부동 소수점 숫자입니다. 여기서 0.0은 완전히 투명을 나타내고 1.0은 완전히 불투명을 나타냅니다. 이 값은 현재보기에만 영향을 미치며 포함 된 하위보기에는 영향을주지 않습니다.

다음과 같이 구성된 컨테이너보기가 있습니다.

self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];

그런 다음 'myView'에 하위보기를 추가합니다.

[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected

그러나 ' anotherView '는 화면에 알파가 있습니다 (예상대로 불투명하지 않습니다)

어떻게 이것이 가능하며 무엇을 할 수 있습니까?


나는 이것이 문서의 버그라고 생각합니다. bugreport.apple.com에 제출해야합니다.

약간의 빠른 조사 후에 내가 볼 수있는 모든 것은 당신이보고있는 것이 항상 어떻게 행동했는지를 시사합니다. 그리고 내 테스트도 그것을 보여줍니다.

보기의 알파는 모든 하위보기에 적용됩니다.

아마도 당신이 필요로하는 전부는 [[UIColor blackColor] colorWithAlphaComponent:0.5]하지만 그렇지 않다면보기를 아이가 아닌 형제로 만들어야 할 것입니다.


부모 뷰에서 직접 알파를 설정하지 마십시오. 대신 하위 뷰에 영향을주지 않고 parentview에 투명성을 적용하는 아래 코드 줄을 사용합니다.

[parentView setBackgroundColor : [[UIColor clearColor] colorWithAlphaComponent : 0.5]];


신속하게

view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)

SWIFT 3 용으로 업데이트 됨

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)

알파 대신 배경색의 불투명도를 설정해도 하위 뷰에 영향을주지 않습니다.

  1. 보기를 선택하십시오.
  2. 배경색보다 속성 관리자로 이동
  3. "기타"를 클릭하십시오
  4. 불투명도를 30 %로 설정

또는 프로그래밍 방식으로 설정할 수 있습니다.

var customView:UIView = UIView()
customView.layer.opacity = 0.3

그게 다야. 행복한 코딩 !!!


스토리 보드가 마음에 들면 User Defined Runtime Attribute다음 위치에보기를 입력하십시오 Identity Inspector.

Key Path: backgroundColor, Type: Color, Value:불투명도 50 % 흰색을 예.


논의 된 가장 간단한 해결책은 다음과 같이 알파를 변경하는 것입니다. Xcode 8 Swift 3의 업데이트 된 버전은 다음과 같습니다.

yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)

목표 C :

yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];

https://developer.apple.com/reference/uikit/uiview/1622417-alpha 에서 Apple 개발자 문서를 참조하십시오.


Swift 4.2 및 Xcode 10.1에서

스토리 보드를 통해 색상과 알파 값을 추가하지 마십시오. 이 경우 프로그래밍 방식 만 작동합니다.

transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

다음은 약간 복잡한 솔루션입니다.

UIView *container;
UIView *myView;
UIView *anotherView;

myView.alpha = 0.5;
[container addSubview:myView];

anotherView.alpha = 1;
[container addSubview:anotherView];

용도 container수퍼로보기를, anotherView그리고 myView모두 서브 뷰가에 container, anotherView에 하위 뷰 아니다 myView.


For now there is only one way make the Parent View transparent and don't put any child views inside (don't put any views as subview) the parent view, put that child views outside of the parent view. To make parent view transparent you can do this via storyboard.

//Transparent the parentView

parentView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)

Put the other view outside of the parent view. It will work like a charm.


Please refer to the bold description from Xcode documentation.

The value of this property is a floating-point number in the range 0.0 to 1.0, where 0.0 represents totally transparent and 1.0 represents totally opaque. Changing the value of this property updates the alpha value of the current view only. However, the transparency imparted by that alpha value affects all of the view's contents, including its subviews. For example, a subview with an alpha value of 1.0 that is embedded in a parent view with an alpha value of 0.5, appears onscreen as if its alpha value is also 0.5.

참고URL : https://stackoverflow.com/questions/18681901/setting-alpha-on-uiview-sets-the-alpha-on-its-subviews-which-should-not-happen

반응형

'Program Tip' 카테고리의 다른 글

ggplot2의 두 열로 그룹화  (0) 2020.10.06
무선을 통한 ADB  (0) 2020.10.06
lodash .groupBy 사용.  (0) 2020.10.06
CSS를 사용하여 div에서 배경 이미지 크기 조정  (0) 2020.10.06
ActionName의 목적  (0) 2020.10.06