如何在iOS中绘制单点

如何在iOS中绘制单点,第1张

概述我想知道绘制单点线的最好方法是什么? 我的目标是在tableViewCell中绘制这个行,使其看起来像本机单元格分隔符. 我不想使用本机分隔符,因为我想使用不同的颜色和不同的位置(而不是底部). 起初我正在使用一个1px的UIView,并将其着色为灰色.但在Retina显示它看起来像2px. 也尝试使用这种方法: - (void)drawLine:(CGPoint)startPoint endPo 我想知道绘制单点线的最好方法是什么?
我的目标是在tableVIEwCell中绘制这个行,使其看起来像本机单元格分隔符.
我不想使用本机分隔符,因为我想使用不同的颜色和不同的位置(而不是底部).

起初我正在使用一个1px的UIVIEw,并将其着色为灰色.但在Retina显示它看起来像2px.
也尝试使用这种方法:

- (voID)drawline:(CGPoint)startPoint endPoint:(CGPoint)endPoint incolor:(UIcolor *)color {    CGMutablePathref straightlinePath = CGPathCreateMutable();    CGPathMovetoPoint(straightlinePath,NulL,startPoint.x,startPoint.y);    CGPathAddlinetoPoint(straightlinePath,endPoint.x,endPoint.y);    CAShapeLayer *shapeLayer = [CAShapeLayer layer];    shapeLayer.path = straightlinePath;    UIcolor *fillcolor = color;    shapeLayer.fillcolor = fillcolor.CGcolor;    UIcolor *strokecolor = color;    shapeLayer.strokecolor = strokecolor.CGcolor;    shapeLayer.linewidth = 0.5f;    shapeLayer.fillRule = kCAFillRuleNonZero;    [self.layer addSublayer:shapeLayer];}

它有60%的时间因为某种原因而工作吗?有什么问题吗?
无论如何,我很乐意听到一个更好的方法.

谢谢.

解决方法 我做了一个UIVIEw类别.这是我的方法:
#define SEParaTOR_HEIGHT 0.5- (voID)addSeparatorlinesWithcolor:(UIcolor *)color{    [self addSeparatorlinesWithcolor:color edgeInset:UIEdgeInsetsZero];}- (voID)addSeparatorlinesWithcolor:(UIcolor *)color edgeInset:(UIEdgeInsets)edgeInset{    UIVIEw *topSeparatorVIEw = [[UIVIEw alloc] initWithFrame:CGRectMake(edgeInset.left,- SEParaTOR_HEIGHT,self.frame.size.wIDth - edgeInset.left - edgeInset.right,SEParaTOR_HEIGHT)];    [topSeparatorVIEw setBackgroundcolor:color];    [self addSubvIEw:topSeparatorVIEw];    UIVIEw *separatorVIEw = [[UIVIEw alloc] initWithFrame:CGRectMake(edgeInset.left,self.frame.size.height + SEParaTOR_HEIGHT,SEParaTOR_HEIGHT)];    [separatorVIEw setBackgroundcolor:color];    [self addSubvIEw:separatorVIEw];}

为了增加雷米的好回答,这可能更简单.做一个班UIline.m

@interface UIline:UIVIEw@end@implementation UIline-(ID)awakeFromNib    {    // careful,contentScaleFactor does NOT WORK in storyboard during initWithCoder.    // example,float sortAPIxel = 1.0/self.contentScaleFactor ... does not work.    // instead,use mainScreen scale which works perfectly:    float sortAPIxel = 1.0/[UIScreen mainScreen].scale;    UIVIEw *topSeparatorVIEw = [[UIVIEw alloc] initWithFrame:        CGRectMake(0,self.frame.size.wIDth,sortAPIxel)];    topSeparatorVIEw.userInteractionEnabled = NO;    [topSeparatorVIEw setBackgroundcolor:self.backgroundcolor];    [self addSubvIEw:topSeparatorVIEw];    self.backgroundcolor = [UIcolor clearcolor];    self.userInteractionEnabled = NO;    }@end

在IB中,放入UIVIEw,单击身份检查器,并将该类重命名为UIline.在IB中设置所需的宽度.将高度设置为1或2像素 – 只需要在IB中查看.在IB中设置您想要的背景颜色.当您运行应用程序时,它将成为该像素的1像素线,该宽度. (你可能不会受到故事板/ xib中的任何默认自动调整设置的影响,我无法让它破裂.)你完成了

注意:您可能会认为“为什么不在awakeFromNib的代码中调整UIVIEw的大小?”加载后,在故事板应用程序中调整视图的大小是有问题的 – 请参阅这里的许多问题!

有趣的gotchya:你可能只是把UIVIEw,比如说,在故事板上的10或20像素高,只是你可以看到它.当然,它在应用程序中消失,你会得到漂亮的一个像素线.但!一定要记住self.userInteractionEnabled = NO,否则可能会超出你的其他按钮!

2016解决方案! https://stackoverflow.com/a/34766567/294884

总结

以上是内存溢出为你收集整理的如何在iOS中绘制单点全部内容,希望文章能够帮你解决如何在iOS中绘制单点所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1111069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存