CGAffineTransform阻止帧移动

时间:2013-11-13 18:18:38

标签: ios objective-c animation user-interface transform

我刚刚意识到一些非常奇怪的事情。使用Xcode 5中的故事板,我创建了一个非常简单的应用程序;只有一个视图的视图控制器。在此视图上有滑块和两个图像。当我移动滑块时,我希望一个图像缩放,另一个图像移动。我将控件连接到视图控制器

TestViewController.h:

@interface TestViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIImageView *scaleImage;
@property (weak, nonatomic) IBOutlet UIImageView *moveImage;

- (IBAction)sliderChanged:(UISlider *)sender;

@end

在TestViewController.m中实现sliderChanged:

- (IBAction)sliderChanged:(UISlider *)sender {
    self.scaleImage.transform = CGAffineTransformMakeScale([sender value], [sender value]);

    CGRect targetFrame = self.moveImage.frame;
    targetFrame.origin = CGPointMake(targetFrame.origin.x + (100 * [sender value]) - 50, targetFrame.origin.y);
    self.moveImage.frame = targetFrame;
}

现在出现了奇怪的部分。当我拖动滑块时,缩放图像被正确缩放,但移动图像不会移动,直到我释放滑​​块(即停止拖动)。转换是否以某种方式阻止了绘制调用?

1 个答案:

答案 0 :(得分:1)

确定。这对我来说仍然是一个谜。不过我有一个解决方法。在视图层而不是视图上执行转换似乎解决了问题

- (IBAction)sliderChanged:(UISlider *)sender {
    self.scaleImage.layer.transform = CATransform3DMakeScale([sender value], [sender value], 1.0);

    CGRect targetFrame = self.moveImage.frame;
    targetFrame.origin = CGPointMake(targetFrame.origin.x + (100 * [sender value]) - 50, targetFrame.origin.y);
    self.moveImage.frame = targetFrame;
}

如果有人愿意向我解释这一点,我将非常感激。否则我会继续尝试继续我的生活:)