ios - 缩放圆圈uiview刚好足以填满屏幕

标签 ios cgaffinetransform

我想自动化设置了radiusRadius的许多uiview的比例因子,使它们看起来像圆。这个想法是,这20个圆形的uiviews,无论大小和位置如何,在点击时都会放大以填满屏幕,无论它们的大小,位置如何。

我的代码具有一个硬编码的值,我想使其变得智能:

[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    self.layer.affineTransform = CGAffineTransformMakeScale(15.0f, 15.0f);

} completion:^(BOOL finished) {
}];

是的-我可以为CGAffineTransformMakeScale键入20,但是较大的圆圈无缘无故地放大了-他们可能需要缩放11。

如何将原始尺寸分解为更大的固定尺寸?

注意:圆的uiview圆角后,应缩放到足够大的程度,以使圆角的边缘不可见-它需要缩放到屏幕之外以填充角落的间隙。

最佳答案

从概念上讲,您希望将圆在屏幕中居中,然后对其进行缩放,以便将屏幕矩形标记在圆中。这是一个方便的图:

从屏幕中心,我们可以在拐角处绘制一个三角形。该三角形的斜边是您所需的圆半径。这是改变圈子的代码:

[UIView animateWithDuration:0.2 animations:^{

    CGPoint screenCenter = CGPointMake(CGRectGetMidX([UIScreen mainScreen].bounds), CGRectGetMidY([UIScreen mainScreen].bounds));
    CGPoint circleCenter = [self.window convertPoint:self.center fromView:self.superview];

    // Calculate distance from circle's current center to the screen center
    UIOffset offset = UIOffsetMake(screenCenter.x - circleCenter.x, screenCenter.y - circleCenter.y);

    // Calculate distance from screen center to corner
    CGFloat screenRadius = sqrtf(powf(CGRectGetWidth([UIScreen mainScreen].bounds) * 0.5, 2.0f)
                                 + powf(CGRectGetHeight([UIScreen mainScreen].bounds) * 0.5, 2.0f));
    CGFloat circleRadius = CGRectGetWidth(self.bounds) * 0.5;

    CGFloat scale = screenRadius / circleRadius;

    // Combine scale and translation
    CGAffineTransform scaleTransform = CGAffineTransformMakeScale(scale, scale);
    CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(offset.horizontal, offset.vertical);
    self.transform = CGAffineTransformConcat(scaleTransform, translateTransform);
}];

关于ios - 缩放圆圈uiview刚好足以填满屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24004604/

相关文章:

ios - 水平翻转 MPMoviePlayerController

ios - 如何提高从屏幕图层获取的CGImageRef的质量?

animation - iOS5 CGAffineTransformMakeRotation 在我第二次执行时不起作用?

ios - Sprite 离开屏幕边界

iphone - 使用iOS Facebook-SDK 3.1获取电子邮件和个人资料图片

ios - UIBezierPath 围绕 UIView 的中心旋转

ios - CGAffineTransform 比例在 iOS10 上移动 View 中心(但在 iOS11 上则不然)

ios - 如何将按钮旋转回水平方向?

ios - MPMoviePlayerController 给我一个黑色的空 View ,没有视频播放

iphone - 获取元素的位置