2017-11-09 16 views
1

사용자가 아바타를 탭하면 애니메이션과 함께 KeyWindow ([[[UIApplication sharedApplication ].delegate window ])에 시트를 추가하고 싶습니다.NSLayoutConstraint, 상수 변경 애니메이션 원점, 내가 설정 한 것이 아님

시트를 원점 (왼쪽 및 아래쪽 끝점)에서가 아니라 아래쪽으로 똑바로 표시하려면 구속 조건의 상수를 변경하십시오. 가끔 문제가 발생하며 가끔 예상대로 작동합니다.

코디네이터 레이아웃이 중요하다고 생각합니다. 생성 및 표시 :

my Question Image

여기 내 코드입니다. 시트는 현장의 바닥에서 시작합니다

@implementation ZBPhotoSheetView 

- (void)awakeFromNib 
{ 
    [super awakeFromNib ]; 
    self.backgroundColor = [[UIColor blackColor ] colorWithAlphaComponent: 0.3 ]; 
    //self.vesselViewBottomConstraint.constant = -150; // add it or not ,don't like it matters. 
} 



+ (ZBPhotoSheetView *)createZhePhotoSheetView 
{ 
    ZBPhotoSheetView * zheSheetView = [[[NSBundle mainBundle ] loadNibNamed:@"ZBPhotoSheetView" owner: nil options: nil ] firstObject ]; 
    return zheSheetView; 
} 


- (void)showZhePhotoSheetView{ 
    if (!_sheetIsShowing){ 
     [[[UIApplication sharedApplication ].delegate window ] addSubview: self ]; 
     self.frame = [UIScreen mainScreen ].bounds; 
     _sheetIsShowing = YES; 

     [UIView animateWithDuration: 0.3f delay:0.f options: UIViewAnimationOptionCurveEaseIn animations:^{ 
      self.vesselViewBottomConstraint.constant = 0; 
      // [self setNeedsUpdateConstraints ]; // add it or not ,don't like it matters. 
      [self layoutIfNeeded]; 
     } completion:^(BOOL finished) {}]; 
    } 
} 

여기 내 XIB입니다. 사전에

enter image description here

많은 덕분에, :-)

답변

2

당신은 제약 일정을 변경하기 전에 한 번 layoutIfNeeded를 호출해야합니다. 방금 창에보기를 추가 했으므로 애니메이션에서 초기 자동 레이아웃과 제약 조건이 함께 바뀝니다. 이 시도.

- (void)showZhePhotoSheetView{ 
    if (!_sheetIsShowing){ 
     [[[UIApplication sharedApplication ].delegate window ] addSubview: self ]; 
     self.frame = [UIScreen mainScreen ].bounds; 
     _sheetIsShowing = YES; 
     [self layoutIfNeeded]; 

     [UIView animateWithDuration: 0.3f delay:0.f options: UIViewAnimationOptionCurveEaseIn animations:^{ 
      self.vesselViewBottomConstraint.constant = 0; 
      // [self setNeedsUpdateConstraints ]; // add it or not ,don't like it matters. 
      [self layoutIfNeeded]; 
     } completion:^(BOOL finished) {}]; 
    } 
}