【问题标题】:colorWithPatternImage and setCornerRadius issuecolorWithPatternImage 和 setCornerRadius 问题
【发布时间】:2011-04-22 23:49:18
【问题描述】:

您好,我想同时实现圆角和由平铺一点 png (OPERATOR_VIEW_BACKGROUND_IMAGE) 组成的背景。我的主要目标是允许设计师通过在项目资源中插入正确的图像来填充视图的背景。

[triggerView setFrame:CGRectMake(0, 0, ICONS_WIDTH, iconFrameHeight)];
[triggerView.layer setCornerRadius:borderRadius];
[triggerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]]];;

我不知道为什么,但是当我添加最后一行时,triggerView 松开了 CornerRadius 设置。 triggerView 是一个UIView,使用接口构建器构建,并以编程方式在其superView viewDidLoad 中修改,使用上面的代码。

我哪里错了?

编辑:我没有提到如果我使用简单的UIColor 就像:[UIColor orangeColor] 它运作良好。所以这与patternImage 的事情有关。

编辑:我也试过这段代码,在我的视图的图层背景上工作:

[triggerView setFrame:CGRectMake(0, 0, ICONS_WIDTH, iconFrameHeight)];
triggerView.backgroundColor = [UIColor clearColor];
UIImage *img = [UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE];
triggerView.layer.backgroundColor = [UIColor colorWithPatternImage:img].CGColor;
triggerView.layer.cornerRadius = radius;
[img release];
[self.view addSubview:triggerView];

现在我得到了一个透明的背景,但边角是圆的;

【问题讨论】:

  • 您是否尝试过切换最后两条语句?

标签: iphone objective-c rounded-corners


【解决方案1】:

尝试用图片的CGImageRef设置图层的content属性:

triggerView.layer.contents = (id) [[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE] CGImage];

您可能必须分配或保留 UIImage 以防止它被自动释放...

【讨论】:

  • 不,它不起作用。顺便说一句,您需要删除开头的方括号。
  • 糟糕,感谢您的修复!当我创建一个图层时,这对我有用,设置它的角半径,然后将它的背景颜色设置为清除,并将它的 maskToBounds 属性设置为 yes。然后我创建一个以图像为内容的图层并将其添加为子图层以实现效果。
【解决方案2】:

在 iOS SDK 4.0 和 4.1 中,colorWithPatternImage 方法有一个错误,显示图像严重...
我使用了这种方法,我遇到了这个错误,但我可以使用另一种方法解决...
尝试使用UIColor类的initWithPatternImage方法:

UIColor *imageBg = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]];

这对我很有用...

不幸的是,我从未使用过cornerRadius 方法,而且我不知道其他问题的可能解决方案。

【讨论】:

  • 我在 colorWithPatternImage 之前使用了 initWithPatternImage,它不起作用,我更喜欢后者以避免添加另一个对象以使用 alloc 释放。无论如何,THX。
  • 谢谢 Matthew,我遇到了 UIBezierPath 和 colorWithPatternImage 的问题。使用initWithPatternImage,解决问题。
【解决方案3】:

好的,感谢 Ben 的评论和 Blog entry 我找到了这个解决方案:

 [triggerView setFrame:CGRectMake(0, 0, ICONS_WIDTH, iconFrameHeight)];
 triggerView.layer.masksToBounds = YES;
 triggerView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]];
 triggerView.layer.cornerRadius = radius;
 [self.view addSubview:triggerView];

似乎triggerView.layer.masksToBounds = YES; 是缺失的部分,但我仍然不明白仅why triggerView.layer.cornerRadius = radius; 是不够的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2013-05-27
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多