美文网首页iOS精品文章
iOS 关于 transform 属性

iOS 关于 transform 属性

作者: 范哥编程 | 来源:发表于2017-11-06 10:16 被阅读138次

    一、 transform 属性

    在OC中,通过 transform 属性可以修改对象的平移、缩放比例和旋转角度。

    1)创建“基于控件初始位置”的形变

    CGAffineTransformMakeRotation ——旋转

    CGAffineTransformMakeTranslation ——平移

    CGAffineTransformMakeScale ——缩放

    2)创建“基于 transform 参数”的形变

    CGAffineTransformTranslate

    CGAffineTransformScale

    CGAffineTransformRotate

    补充:在OC中,所有跟角度相关的数值,都为弧度制 180度 = M_PI , 45度 = M_PI_4 。

    正数表示顺时针旋转,负数表示逆时针旋转。

    “基于 transform 参数”的形变可以基于控件上一次的状态进行叠加形变,如先旋转再平移。

    代码:

    - (void)rotate:(id)sender{
        UIButton *button = (UIButton *)sender;
        if (button.tag) {
            //self.headImageView.transform = CGAffineTransformMakeRotation(-M_PI_4);
            //逆时针旋转
            self.headImageView.transform = CGAffineTransformRotate(self.headImageView.transform, -M_1_PI);
        } else {
            //顺时针旋转
            self.headImageView.transform = CGAffineTransformRotate(self.headImageView.transform, M_PI_4);
        }
    }
    

    ps: 注意一点,当你使用transform的时候 你旋转 或者变形后会发现和你想要的效果不一样了了 这个时候就应该用到 CGAffineTransformIdentity 这个属性。
    例: 我在写一个播放器,横竖屏切换中 再次点击btn 回到最初始状态,这个时候就要使用这个属性 ,把控件恢复默认设置。 顺便提到一下 如果操控的控件的子控件 你用的是Masonry 进行约束 要用 mas_remake... 这个 。 啥也不说了 贴上代码自己感受。

    -(void)layoutSubviews {
        [super layoutSubviews];
        if (!_isTransform) {
            self.bottomImageV.transform = CGAffineTransformIdentity;
            self.screenBtn.transform = CGAffineTransformIdentity;
            self.numsPeopleImageV.transform = CGAffineTransformIdentity;
            self.peopleL.transform = CGAffineTransformIdentity;
            self.stopBtn.transform = CGAffineTransformIdentity;
            self.bottomImageV.frame = CGRectMake(0, self.bounds.size.height - 35, self.bounds.size.width, 35);
            [self.screenBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.centerY.equalTo(self.bottomImageV);
                make.right.equalTo(self.bottomImageV).offset(-15);
            }];
            [self.numsPeopleImageV mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.centerY.equalTo(self.bottomImageV);
                make.left.equalTo(self.bottomImageV).offset(15);
                make.height.with.equalTo(@(13));
            }];
            [self.peopleL mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.centerY.equalTo(self.bottomImageV);
                make.left.equalTo(self.numsPeopleImageV.mas_right).offset(10);
            }];
            [self.stopBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.centerX.equalTo(self);
                make.centerY.equalTo(self);
            }];
            
        }else {
            self.bottomImageV.transform = CGAffineTransformRotate(self.bottomImageV.transform, M_PI_2);
            self.bottomImageV.frame = CGRectMake(0, 0, 35, KScreenHeight);
            self.screenBtn.transform = CGAffineTransformRotate(self.screenBtn.transform, M_PI_2);
            self.numsPeopleImageV.transform = CGAffineTransformRotate(self.numsPeopleImageV.transform, M_PI_2);
            self.peopleL.transform = CGAffineTransformRotate(self.peopleL.transform, M_PI_2);
            self.stopBtn.transform = CGAffineTransformRotate(self.stopBtn.transform, M_PI_2);
            
            [self.screenBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.centerX.equalTo(self.bottomImageV);
                make.bottom.equalTo(self.bottomImageV).offset(-15);
            }];
            [self.numsPeopleImageV mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.centerX.equalTo(self.bottomImageV);
                make.top.equalTo(self.bottomImageV).offset(15);
                make.height.with.equalTo(@(13));
            }];
            [self.peopleL mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.centerX.equalTo(self.bottomImageV);
                make.top.equalTo(self.numsPeopleImageV.mas_bottom).offset(10);
            }];
            
            [self.stopBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.center.equalTo(self);
            }];
        }
        
    }
    

    对了,这里注意一点,如果改变控件的位置等 最好把布局子控件写在 layoutSubviews 这里面。

    哈哈哈 写的不好请大神们指点了。

    相关文章

      网友评论

        本文标题:iOS 关于 transform 属性

        本文链接:https://www.haomeiwen.com/subject/hcwkmxtx.html