在Android中,我们可以将SVG导入为Vector XML, 使用它作为Drawable, 更改SVG图标的颜色并添加到按钮
void setSvgIcnForBtnFnc(Button setBtnVar, int setSvgVar, int setClrVar, String PosVar)
{
Drawable DevDmjVar = getDrawable(setSvgVar);
DevDmjVar.setBounds(0,0,Dpx24,Dpx24);
DevDmjVar.setColorFilter(new PorterDuffColorFilter(setClrVar, PorterDuff.Mode.SRC_IN));
switch (PosVar)
{
case "Tit" : setBtnVar.setCompoundDrawables(null, DevDmjVar, null, null); break;
case "Rit" : setBtnVar.setCompoundDrawables(null, null, DevDmjVar, null); break;
case "Pit" : setBtnVar.setCompoundDrawables(null, null, null, DevDmjVar); break;
default: setBtnVar.setCompoundDrawables(DevDmjVar, null, null, null); break;
}
}
如何在swift for iphone中执行此操作?
setBtnVar.setImage(<image: UIImage?>, forState: <UIControlState>)
答案 0 :(得分:8)
UPD :另请参阅此UseYourLoaf blog post
刚刚在Erica Sadun blog post找到 iOS 11 你could use Vector Assets。
什么&#34;矢量资产&#34;意味着:
如果单击该框,矢量数据将随您一起提供 应用。一方面,这使您的应用程序变得有点 比较大,因为矢量数据占用了一些空间。但就此而言 另一方面,会给你机会扩展这些图像,其中 可能在许多不同的情况下都很有用。所以,一个是,如果 你知道这个特定的图像将在多个时使用 大小。但这可能不太明显。所以,一个案例是象征性的 应使用动态类型调整大小的字形。因为我们正在思考 动态类型,你也应该考虑有字形 出现在类型旁边适当调整大小。另一个案例 真的不明显,是标签栏图片。 ...我们非常强大的可访问性功能 建议支持,允许已经转为他们的用户 动态类型大小。 ...因此,我们建议您这样做,以提高应用在所有用户中的可用性
使用方法:
Assets.xcassets
UIImageView
中创建UIViewController
,并指定UIImage
等pdf文件。或 Asset Catalog Creator只需拖放即可完成第1步和第2步。
iOS&lt; 11 强>
没有使用SVG图像的原生方式。
查看Macaw
通过Cocoapod
导入框架pod "Macaw", "0.8.2"
检查他们的example project:这是您呈现tiger.svg
的方式(位于项目目录中,而不是Assets.xcassets
文件中)
import UIKit
import Macaw
class SVGExampleView: MacawView {
required init?(coder aDecoder: NSCoder) {
super.init(node: SVGParser.parse(path: "tiger"), coder: aDecoder)
}
}
当然还有其他一些第三方库:
答案 1 :(得分:2)
经过一场噩梦之后,我想出了使用Swift在按钮中使用SVG的解决方案。 这适合所有不想像我一样挣扎的人
我使用简单的SwiftSVG库从SVG文件中获取UIView
用法:
namBtnVar.setSvgImgFnc("ikn_sev", ClrVar: UIColor.cyanColor())
安装SwiftSVG图书馆
1)使用pod安装:
//对于Swift 3
pod 'SwiftSVG'
//适用于Swift 2.3
pod 'SwiftSVG', '1.1.5'
2)添加框架
转到AppSettings
- &GT;常规标签
- &GT;向下滚动到链接的框架和库 - &GT;点击加号图标
- &GT;选择SVG.framework
3)在项目的任何地方添加以下代码
extension UIButton
{
func setSvgImgFnc(svgImjFileNameVar: String, ClrVar: UIColor)
{
setImage((getSvgImgFnc(svgImjFileNameVar, ClrVar : ClrVar)), forState: .Normal)
}
}
func getSvgImgFnc(svgImjFileNameVar: String, ClrVar: UIColor) -> UIImage
{
let svgURL = NSBundle.mainBundle().URLForResource(svgImjFileNameVar, withExtension: "svg")
let svgVyuVar = UIView(SVGURL: svgURL!)
/* The width, height and viewPort are set to 100
<svg xmlns="http://www.w3.org/2000/svg"
width="100%" height="100%"
viewBox="0 0 100 100">
So we need to set UIView Rect also same
*/
svgVyuVar.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
for svgVyuLyrIdx in svgVyuVar.layer.sublayers!
{
for subSvgVyuLyrIdx in svgVyuLyrIdx.sublayers!
{
if(subSvgVyuLyrIdx.isKindOfClass(CAShapeLayer))
{
let SvgShpLyrIdx = subSvgVyuLyrIdx as? CAShapeLayer
SvgShpLyrIdx!.fillColor = ClrVar.CGColor
}
}
}
return svgVyuVar.getImgFromVyuFnc()
}
extension UIView
{
func getImgFromVyuFnc() -> UIImage
{
UIGraphicsBeginImageContext(self.frame.size)
self.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
}
答案 2 :(得分:1)
如果您在导入后为比例因子选择单一比例,则可以原生使用基于矢量的PDF。
PDF的尺寸将是资产的 1x 尺寸。
Xcode将为每个比例生成光栅化图像。然后,您可以像使用任何其他图像一样使用它。
答案 3 :(得分:0)
我用了Aleksey Potapov的答案。转换和一切都完美! 但是我遇到了一个问题,就是我的图像对于我的应用程序来说太大了。
因此,使用它可以将其调整为适合iOS开发的大小:
<svg xmlns="http://www.w3.org/2000/svg" height="30" width="30" viewBox="0 0 1000 1000" xmlns:xlink="http://www.w3.org/1999/xlink">
答案 4 :(得分:0)
查看我的应用:Speculid 它将根据您的资产库的设置自动将SVG转换为PDF或PNG。