CGAffineTransform旋转并调整滑块值的大小

San*_*007 2 objective-c rotation uislider cgaffinetransform ios

我使用SliderResizeRotate-

对于旋转 -

 CGAffineTransform transform = editingView.transform;
  transform =  CGAffineTransformMakeRotation(sliderVal * 2*M_PI / 30);
  editingView.transform = transform;
Run Code Online (Sandbox Code Playgroud)

对于调整大小 -

CGAffineTransform t = CGAffineTransformMakeScale(sliderVal/30, sliderVal/30);
  CGPoint center = editingView.center; 
  [UIView animateWithDuration:0.5
                   animations:^{
                      editingView.transform = t;
                     editingView.center = center;
                   }
                   completion:^(BOOL finished) {

                   }];
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,两者分别工作正常.

但我必须resize旋转视图,或旋转调整大小的视图.

我看到了许多建议来,因为我使用单独的行为CGAffineTransformMakeRotation,CGAffineTransformMakeScale如果我使用CGAffineTransformScale,CGAffineTransformRotation然后我的问题就会解决.

问题是当我使用时,CGAffineTransform缩放不正确,View从屏幕上消失.

Efe*_*sus 5

您正在使用editingView.transform线设置视图的变换矩阵.

您应该更改旋转代码:

CGAffineTransform transform = editingView.transform;
transform =  CGAffineTransformMakeRotation(sliderVal * 2*M_PI / 30);
editingView.transform = CGAffineTransformConcat(editingView.transform, transform);
Run Code Online (Sandbox Code Playgroud)

并调整大小:

CGAffineTransform t = CGAffineTransformMakeScale(sliderVal/30, sliderVal/30);
CGPoint center = editingView.center; 
[UIView animateWithDuration:0.5
                   animations:^{
                      editingView.transform = CGAffineTransformConcat(editingView.transform,t);
                      editingView.center = center;
                   }
                   completion:^(BOOL finished) {

                   }];
Run Code Online (Sandbox Code Playgroud)

随着CGAffineTransformConcat你添加2个变换矩阵,你不会丢失旧的变换.您可以使用CGAffineTransformIdentity重置转换.