Ios 在非视网膜显示器上渲染圆

Ios 在非视网膜显示器上渲染圆,ios,render,geometry,Ios,Render,Geometry,我有收藏视图。项目-是一个带有2个圆圈的视图-圆圈视图用于选择和标记。我的一些观点不正确。我在“视图”框架上工作并进行了更改:现在所有的浮点值都是整数。它有助于视网膜显示。我能为非视网膜显示器做些什么 - (void)layoutSubviews { [super layoutSubviews]; CGRect frame, contentFrame, markFrame, selectFrame; int markFrameMargin, contentHeight,

我有收藏视图。项目-是一个带有2个圆圈的视图-圆圈视图用于选择和标记。我的一些观点不正确。我在“视图”框架上工作并进行了更改:现在所有的浮点值都是整数。它有助于视网膜显示。我能为非视网膜显示器做些什么

- (void)layoutSubviews
{
    [super layoutSubviews];
    CGRect frame, contentFrame, markFrame, selectFrame;
    int markFrameMargin, contentHeight, selectRadius, markRadius;

    frame = self.frame;
    frame.origin.x = (int) frame.origin.x;
    frame.origin.y = (int) frame.origin.y;
    frame.size.width = (int) frame.size.width;
    frame.size.height = (int) frame.size.height;
    self.frame = frame;

    contentHeight = (int) self.bounds.size.height * ContentFrameRatio + 1;
    CGRectDivide(self.bounds, &contentFrame, &markFrame, contentHeight, CGRectMinYEdge);

    selectFrame = contentFrame;
    markFrame   = CGRectInset(markFrame, (markFrame.size.width - markFrame.size.height) / 2, 0);

    markFrameMargin = (int) markFrame.size.width / MarkFrameMarginRatio;
    markFrame = CGRectInset(markFrame, markFrameMargin, markFrameMargin);

    selectRadius = selectFrame.size.width / 2;
    markRadius   = markFrame.size.width / 2;

    self.contentLabel.frame = contentFrame;
    self.selectedBackgroundView.frame = selectFrame;
    self.markView.frame = markFrame;

    self.selectedBackgroundView.layer.cornerRadius = selectRadius;
    self.markView.layer.cornerRadius = markRadius;
}
屏幕:

我正在寻找解决办法。要获得良好的圆渲染效果,请确保:

  • 帧的位置是整数值
  • 宽度和高度是整数
  • 宽度和高度为偶数(宽度%2==0)

  • CGRectIntegral
    可能是对帧值进行舍入的一种更简单的方法。我知道,但是这个方法不会将位置值设为整数;正在返回一个非整数值。您是否尝试过调整框架大小,使其宽度为偶数?还要确保宽度和高度相同,否则圆看起来会很奇怪。问题已经解决了。但答案是否定的。“selectRadius=selectFrame.size.width/2;”select radius的类型“int”比其始终为整数的类型多。@user2979568
    cRectIntegral:返回将源矩形值转换为整数后得到的最小矩形。