2014-10-06 5 views
0

나는 내보기 중 하나의 layoutSubviews 방법에 다음 코드가 있습니다, 흐리게보기는 때때로 업데이트하지 않습니다

UIVisualEffect *blurEffect; 
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; 

UIVisualEffectView *visualEffectView; 
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; 
visualEffectView.frame = CGRectMake(0, 0, self.blurView.frame.size.width, self.blurView.frame.size.height); 

[self.blurView addSubview:visualEffectView]; 

self.blurView이 주어진 지역의 펜촉에 함께 IBOutlet에 해당 그 시원한 iOS 8 방식으로 흐리게하고 싶은 나의 시각. 그 특정 지역은 종종 변화하는 그래픽을 특징으로합니다.

내 문제는 내 그래픽이 변경되어 내 흐려보기가 표시 될 때 가끔 흐린 이미지가 더 이상 존재하지 않는 그래픽이라는 것입니다. 흐림보기가 수퍼 뷰가 변경되었음을 알지 못하는 것 같습니다.

흐리게 표시된보기가 현재 표시된 그래픽인지 확인하는 전략이 있습니까? API를 사용하여이 문제를 극복하기 위해 두 가지 전략이있다

답변

0

:

  1. 를 사용하여 새로운 UIVisualEffectView마다
  2. 애니메이션 UIVisualEffectView의 알파 속성은

첫 번째 전략은보다 코드 두 번째이지만 UIVisualEffectView의 흐린보기를 다시 설정할 때도 똑같이 효과적입니다. (1)과 (2)가 작동하는 이유는 (1) 강제로 그 아래에서 리 샘플링하고, 나는 추정하고 (2) 그렇게한다. 그런데 왜 (2)이 일을합니까?

아래의 (2) 리샘플링 이유는 Apple의 API가 알파 속성에 애니메이션을 적용하는 경우 UIVisualEffectView의 배경을 흐리게 처리하지 않기 때문입니다. 다음은 다음 주석 우리이 말 :

/* 
Proper use of this class requires some assistance on your part. Namely: 

• Avoid alpha values < 1 ... 

*/ 
0

을 나는이에 나는 (내 생각에 아직 완벽한 해결책이 아니다)의 내부를 포함하는 것입니다 UIVisualEffect 무엇을 더 밖으로 일을 사용하는 모든 시간을 운영하는 " viewWillAppear "유형의 메소드. 이 방법을 사용하면 시각적 효과보기가 추가되지 않고 시각적 효과보기가 추가되기보다는 시각적 효과가 렌더링 될 때 렌더링됩니다.

1

UivisualEffectsView를 강제 실행하는 또 다른 방법은 배경색을 다른 시각 색상을 선택하고 원본으로 돌아갑니다. 이렇게하면 다시 계산해야하며 오류가 발생하지 않습니다 (알파 값을 변경하려고하는 경우와 같이).

두 개의 UivisualEffectsViews (하나의 추가 빛과 하나의 어두운 색)가 있으며 전체보기의 배경 이미지를 변경 한 후에이 작은 메서드를 호출하여 효과보기를 업데이트합니다.

-(void)refreshBlurViews { 
    self.lightVisualEffect.backgroundColor = [UIColor blackColor]; 
    self.lightVisualEffect.backgroundColor = [UIColor clearColor]; 
    self.darkVisualEffect.backgroundColor = [UIColor blackColor]; 
    self.darkVisualEffect.backgroundColor = [UIColor clearColor]; 
} 

길을 따라 돕는 희망!

관련 문제