0

这是问题所在。在过去的几天里,我一直在搜索和尝试,并没有运气盯着那几行代码。任何帮助,将不胜感激!

我正在尝试使用捏合手势进行缩放,它工作正常,直到我先旋转它,然后选择缩放它。cgrectmake() 会简单地忽略我传入的 y 和 height 值并发疯。这是代码:

float width_delta = cos(angle) * self.selectedLabel.frame.size.width * (scale - 1);
    float height_delta = cos(angle) * self.selectedLabel.frame.size.height * (scale - 1);

    NSLog(@"delta width: %f delta height: %f", width_delta, height_delta);
    NSLog(@"frame origin: %f %f", self.selectedLabel.frame.origin.x, self.selectedLabel.frame.origin.y);


    float origin_x = self.selectedLabel.frame.origin.x - width_delta/2;
    float origin_y = self.selectedLabel.frame.origin.y - height_delta/2;
    float width = self.selectedLabel.frame.size.width + width_delta;
    float height = self.selectedLabel.frame.size.height + height_delta;

    NSLog(@"expected position: %f %f %f %f ",
          origin_x,
          origin_y,
          width,
          height);

    self.selectedLabel.autoresizingMask = UIViewAutoresizingNone;

    self.selectedLabel.frame = CGRectMake(
                                          origin_x,
                                          origin_y,
                                          width,
                                          height);

    NSLog(@"real position: %f %f %f %f", self.selectedLabel.frame.origin.x, self.selectedLabel.frame.origin.y, self.selectedLabel.frame.size.width, self.selectedLabel.frame.size.height);
    self.selectedLabel.font = [UIFont fontWithName:self.selectedLabel.font.fontName size:self.selectedLabel.font.pointSize * scale];

    [pinchGesture setScale:1];

这是缩放前 3 次更改的日志。这些都在时间上紧紧地结合在一起,并且都是在我几乎没有移动手指进行缩放时发生的。

2014-09-08 00:50:58.428 Crystals[5673:60b] scale: 1.000386 angle: -29.813133
2014-09-08 00:50:58.430 Crystals[5673:60b] delta width: -0.002168 delta height: -0.001471
2014-09-08 00:50:58.431 Crystals[5673:60b] frame origin: 46.324917 55.011127
2014-09-08 00:50:58.432 Crystals[5673:60b] expected position: 46.326000 55.011864 175.348007 118.976303 
2014-09-08 00:50:58.433 Crystals[5673:60b] real position: 46.326000 8.780173 175.348007 211.439682
2014-09-08 00:50:58.434 Crystals[5673:60b] 
2014-09-08 00:50:58.444 Crystals[5673:60b] scale: 0.999682 angle: -29.813133
2014-09-08 00:50:58.446 Crystals[5673:60b] delta width: 0.001786 delta height: 0.002153
2014-09-08 00:50:58.447 Crystals[5673:60b] frame origin: 46.326000 8.780173
2014-09-08 00:50:58.448 Crystals[5673:60b] expected position: 46.325108 8.779097 175.349792 211.441833 
2014-09-08 00:50:58.449 Crystals[5673:60b] real position: 46.325104 -14.597655 175.349792 258.195343
2014-09-08 00:50:58.450 Crystals[5673:60b] 
2014-09-08 00:50:58.451 Crystals[5673:60b] scale: 1.000000 angle: -29.813133
2014-09-08 00:50:58.452 Crystals[5673:60b] delta width: -0.000000 delta height: -0.000000
2014-09-08 00:50:58.453 Crystals[5673:60b] frame origin: 46.325104 -14.597655
2014-09-08 00:50:58.455 Crystals[5673:60b] expected position: 46.325104 -14.597655 175.349792 258.195343 
2014-09-08 00:50:58.457 Crystals[5673:60b] real position: 46.325108 -26.417831 175.349777 281.835693

可以看到,预期和实际的 y 值和高度值完全不相关,但是 x 和宽度都很好。用图形来描述,当我想让它向西北-东南方向扩展时,它会向东北-西南方向扩展,然后急剧收缩成一条线。

即使要缩放 UILabel 的原始值,我也尝试过 cgrectmake,并且发生相同的行为没有任何区别。我还使用了调试器,并确保我传入的那些值在 cgrectmake 之前和之后都没有改变......

有什么我想念的吗?绝望需要帮助...

4

0 回答 0