通過Autolayout做動畫

autolayout1.gif

------from iOS_Animations_by_Tutorials_v2
https://github.com/LomyCool/iOSAnimation/tree/master/aotulayout
1.在xib添加的約束,在代碼中如何修改?
2.如何通過代碼添加約束?

//遍歷父控件的約束,通過 firstItem 和firstAttribute 來確定某一約束,或者通過 identifier(xib必須先設(shè)置好)確定,
  for (NSLayoutConstraint * con in _titleLabel.superview.constraints) {
        
        if (con.firstItem == _titleLabel && con.firstAttribute == NSLayoutAttributeCenterX) {
            con.constant = isMenuOpen ? -100:0;
            continue;
        }
        
        if ([con.identifier isEqualToString:@"TitleCenterY"]) {
            con.active = false;
            [_titleLabel.superview removeConstraint:con];
            //代碼添加約束
            NSLayoutConstraint * newCon = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:_titleLabel.superview attribute:NSLayoutAttributeCenterY multiplier:isMenuOpen? 0.67 :1.0 constant:0.5];
            newCon.identifier = @"TitleCenterY";
            newCon.active = YES;
            continue;
        }
    }

3.如何讓約束產(chǎn)生動畫效果? [self.view layoutIfNeeded];

// 旋轉(zhuǎn) + 按鈕
    [UIView animateWithDuration:1 delay:0 usingSpringWithDamping:0.3 initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseInOut animations:^{
        [self.view layoutIfNeeded];
        CGFloat angle = isMenuOpen ? M_PI_4 : 0;
        _menuBtn.transform = CGAffineTransformMakeRotation(angle);
    } completion:^(BOOL finished) {
        
    }];

4.如何給通過代碼創(chuàng)建的控件添加約束?

//6.0
UIImageView * imageView = [[UIImageView alloc] initWithImage:image];
    [self.view addSubview:imageView];
imageView.translatesAutoresizingMaskIntoConstraints = NO;
NSLayoutConstraint * newCon = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:_self.view attribute:NSLayoutAttributeCenterY multiplier:isMenuOpen? 0.67 :1.0 constant:0.5];
            newCon.identifier = @"TitleCenterY";
            newCon.active = YES;

//9.0 新出的方法
UIImageView * imageView = [[UIImageView alloc] initWithImage:image];
    [self.view addSubview:imageView];
  imageView.translatesAutoresizingMaskIntoConstraints = NO;
    NSLayoutConstraint *conX = [imageView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor]; // centerX
     NSLayoutConstraint * conBottom = [imageView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor constant:imageView.frame.size.height]; // bottom 往下移動imageViewHeight距離
    NSLayoutConstraint * conWidth = [imageView.widthAnchor constraintEqualToAnchor:self.view.widthAnchor multiplier:0.33 constant:-50]; // 確定寬度
    CGFloat scale = image.size.height / image.size.width;
    NSLayoutConstraint * conHeight = [imageView.heightAnchor constraintEqualToAnchor:imageView.widthAnchor multiplier:scale]; // 寬高相等
    [NSLayoutConstraint activateConstraints:@[conX,conBottom,conHeight,conWidth]];
    [self.view layoutIfNeeded];
871DB054-1AF5-4338-ADB1-983B029BB4FF.png

5.如何給剛創(chuàng)建出來的控件,添加動畫效果?
重寫 didMoveToSuperview,

-(void)didMoveToSuperview{
    [super didMoveToSuperview];
    if (!self.superview) {
        return;
    }
    
    [UIView animateWithDuration:1 delay:0.03 usingSpringWithDamping:0.3 initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseIn animations:^{
        self.alpha = 1.0;
        CGPoint center = self.center;
        center.x -= self.superview.bounds.size.width;
        self.center = center;
    } completion:^(BOOL finished) {
        
    }];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,979評論 25 709
  • 接連幾天都是凌晨4點多做夢嚇醒,一直昏昏沉沉,今天早上醒過一次又睡著了,然后8點起床,下樓買菜。 趕著母親節(jié)活動,...
    錦年_77閱讀 245評論 0 0
  • 照著書上的示例敲了一下: 一.什么是事件冒泡: 在chrome瀏覽器下測試結(jié)果:(單擊了span元素) 也就是在單...
    溫夢麗閱讀 310評論 0 0
  • 濃霧融化了遠處的山巒,近處的房屋眼看也快淪陷了。立秋之后的霧來得這樣富足而濃烈,大有打門前走過之勢。六點鐘的...
    一舟洲閱讀 425評論 0 2

友情鏈接更多精彩內(nèi)容