我想自动化设置了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/