标签: ibdesignable

层变换矩阵(CATransform3D 等)但具有 IBDesignable?

本课程将对直立图像进行透视。

它可以完美运行,但不能在带有 IBDesignable 的 Storyboard 中实时运行。这是非常可悲的。

是否可以使用 CATransform3D 等在带有 IBDesignable 的 Storyboard 上进行实时显示?

// Twist.swift .. twist on Y, perspective from the left
import UIKit
@IBDesignable
class Twist:UIViewController
    {
    @IBInspectable var perspective:CGFloat = 0.5        // -1 to 1

    @IBOutlet var im:UIView!    // the image you want to twist on y

    override func prepareForInterfaceBuilder()
        { twist(perspective) }

    override func viewDidAppear(animated: Bool)
        {
        twist(perspective)
        super.viewWillAppear(animated)
        }

    func twist(f:CGFloat)           // -1 to 1
        {
        // hinge around left edge
        im.layer.anchorPoint = CGPointMake(0, 0.5) …
Run Code Online (Sandbox Code Playgroud)

calayer swift ibdesignable xcode7

5
推荐指数
1
解决办法
594
查看次数

@IBDesignable 不呈现 UILabel 和 UITextField 文本

我创建了一个 @IBDesignable 子类 UIView

该视图有几个标签和一个文本字段。

当我尝试在故事板中更改它们的值时,不会呈现这些更改。在cornerRadius 的不断变化中,borderWidth 和borderColor 在故事板上呈现。

我错过了什么?

这是它在故事板中的样子:

在此处输入图片说明

这是它在模拟器中的外观以及我希望它在渲染后在故事板中的外观

在此处输入图片说明

这是该类的代码:

import UIKit

@IBDesignable

class LoginTextField: UIView {


    @IBInspectable var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }
    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }
    @IBInspectable var borderColor: UIColor? {
        didSet {
            layer.borderColor = borderColor?.cgColor
        }
    }

    @IBInspectable var title: String = "" {
        didSet {
            titleLabel.text = title
        } …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift ibdesignable ibinspectable

5
推荐指数
0
解决办法
726
查看次数

使用自动布局使用IB_DESIGNABLE自定义视图错位视图警告和奇怪行为

我创建了一个自定义的IB可设计视图(请参阅下面的代码),它在IB中正确呈现,并且在运行时也能正常工作.但是,在获取有关视图错位的警告时,我无法在Interface Builder中手动调整视图大小(当触摸调整大小手柄时,视图将在其容器中跳转).

我对各种不同的布局都有相同或类似的行为.如果我在这里做错了,或者这只是IB中的一个错误,你有没有想法?

(PS:我不能忽视警告)

错位的视图警告

编辑:添加约束的截图:

约束

这是代码(标题):



    IB_DESIGNABLE
    @interface AKATestView : UIView
    @end

Run Code Online (Sandbox Code Playgroud)

执行:



    @interface AKATestView()

    @property(nonatomic)BOOL subviewsCreated;
    @property(nonatomic)BOOL subviewConstraintsCreated;
    @property(nonatomic)NSDictionary* views;

    @end

    @implementation AKATestView

    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        self = [super initWithCoder:aDecoder];
        if (self) {
            [self setupAfterInit];
        }
        return self;
    }
    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            [self setupAfterInit];
        }
        return self;
    }

    - (void)setupAfterInit
    {
        [self createSubviews];
    }

    - (void)createSubviews
    {
        if (!self.subviewsCreated)
        {
            self.translatesAutoresizingMaskIntoConstraints = NO;

            UILabel* labelView = [[UILabel alloc] initWithFrame:CGRectZero];
            labelView.text = …
Run Code Online (Sandbox Code Playgroud)

ios autolayout xcode6 ibdesignable

4
推荐指数
1
解决办法
294
查看次数

从IBDesignable中的自定义控件框架加载代码

我在OS X应用程序中实现了一个自定义控件,工作正常.绘制控件时,它使用来自非系统框架的代码.控件是用swift编写的,框架在Objective-C中.框架不与具有自定义控件的应用程序构建在同一项目或工作区中.我已将Framework添加到目标并将其添加到复制文件构建阶段.

当我在swift中将IBDesignable修饰添加到自定义控件类时,在尝试在Interface Builder中查看控件时出现错误.我得到的错误是:

file:///Users/ktam/github/MovingImagesDemo/Spinner2/SpinnerController.xib: error: IB Designables: Failed to render instance of Spinner: dlopen(Spinner2.app, 1): Library not loaded: @executable_path/../Frameworks/MovingImages.framework/Versions/A/MovingImages Referenced from: Spinner2.app Reason: image not found

当我检查在IBDesignables子文件夹中创建的应用程序包时,框架位于应用程序包中的正确位置.我假设在这种情况下实际运行的可执行文件不是IBDesignables应用程序包中的可执行文件,但可能是某种类型的Interface Builder可执行文件,这解释了为什么无法加载Framework图像.

加载Interface Builder在使用IBDesignable呈现视图时可以找到的代码,我需要做什么?


进一步测试后的信息:

我重新构建框架,同时指定安装目录为〜/ Library/Frameworks,然后将构建的Framework复制到该位置,然后我更新了应用程序目标,以便包含〜/ Library/Frameworks以及应用程序和接口的Runpath搜索路径Builder现在正确绘制自定义控件.

这不是我需要的解决方案,但它指出了问题所在,我仍然需要弄清楚正确的解决方案是什么.

interface-builder ios osx-yosemite ibdesignable

4
推荐指数
1
解决办法
1654
查看次数

当另一个属性的计数增加时,生成更多属性

基本上,我有一个视图,其中可以有无限量的UIViews.我希望能够设置self.numberOfSections = 8self.numberOfSections = 2然后UIImages分别生成相同数量的生成,然后可以进行操作.

目前IBInspectible我的代码中有很多图像,无论我有2个numberOfSections还是100个numberOfSections.我想以某种方式能够UIImages基于我的numberOfSections数字创建.

rotaryWheelView

storyBoardInspect

如果我在这里将Number Of Sections设置为2 - 我可以在故事板中设置图像,但是所有其他IBInspectable元素也会显示为不会被使用,因为只有2个部分.有没有办法只显示所需的那些?我想在故事板中设置图像.有没有办法重构这一点,以便没有这么多的IBInspectables?

这就是我如何将图像设置为代码中各种以编程方式生成的视图.

-(void)drawRect:(CGRect)rect

    for (int i = 0; i < self.numberOfSections; i++) {
       NSString *rotaryName = [NSString stringWithFormat:@"rotaryImage%d", i + 1];
       id rotaryNameValue = [self valueForKey:rotaryName];
       [self.sectorView setValue:rotaryNameValue forKey:@"image"];
    }
}
Run Code Online (Sandbox Code Playgroud)

objective-c uiimage ios ibdesignable ibinspectable

4
推荐指数
1
解决办法
174
查看次数

使用IBInspectable时,界面构建器如何决定何时引入分隔符

现在,我正在创建一个自定义视图,并且想知道如何interface builder确定何时引入一行。

在此处输入图片说明

如您所见,它分为3个部分。sub groups但是我想知道如何确定子组的开始和结束位置。

因为我所做的就是IBInspectables像这样在彼此之间创建了底层。

@IBInspectable var dotCount: Int = 0 { didSet { setup() } }

@IBInspectable var dotSize: CGFloat = 7 { didSet { dotSize = dotSize + 1.5 } }

@IBInspectable var dotSpacing: CGFloat = 10

@IBInspectable var dotColor: UIColor = UIColor.clear {
    didSet {
        for dot in dots {
            if let dot = dot, dot != selectedView {
                dot.backgroundColor = dotColor
            }
        }
    }
}

@IBInspectable var borderWidth: CGFloat = …
Run Code Online (Sandbox Code Playgroud)

xcode interface-builder ibdesignable ibinspectable

4
推荐指数
1
解决办法
377
查看次数

想要通过@IBInspectable实现键盘选择

我想从@IBInspectabale创建键盘选择

键盘选择

如何做到这一点

我正在创建一个视图,在其中插入ImageView和TextField,现在,我将该自定义视图类创建为@IBDesignable并创建了@IBInspectable元素。

我成功创建了侧面图像和占位符元素,但是现在我尝试创建键盘类型,但遇到了问题。

代码片段:`import UIKit

@IBDesignable类CustomTextField:UIView,UITextFieldDelegate {

//custom view from the XIB file
var view: UIView!

@IBOutlet weak var textField: UITextField!
@IBOutlet weak var imageView: UIImageView!

override init(frame: CGRect) {
    super.init(frame: frame)
    loadViewFromNib ()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    loadViewFromNib ()
}

func loadViewFromNib() {
    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: "CustomTextField", bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
    view.frame = bounds
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.addSubview(view);



} …
Run Code Online (Sandbox Code Playgroud)

keyboard ios swift ibdesignable ibinspectable

4
推荐指数
2
解决办法
766
查看次数

IBInspectable未在情节提要中更新,但可在模拟器上使用

我可以在模拟器上查看使用IBInspectable所做的更改,但不能在情节提要中查看

我尝试重新安装Xcode,但没有解决此问题。这是一些屏幕截图:

故事板

仿真器

因此,我知道我的代码运行正常,因为它在模拟器中运行,并且这是一个新项目,因此我没有任何“ Storyboard可能仍在加载更改”的问题。

import UIKit

extension UIView {

@IBInspectable
var cornerRadius: CGFloat {
    get {
        return layer.cornerRadius
    }
    set {
        layer.cornerRadius = newValue
        layer.masksToBounds = newValue > 0
    }
}

@IBInspectable
var borderWidth: CGFloat {
    get {
        return layer.borderWidth
    }
    set {
        layer.borderWidth = newValue
    }
}

@IBInspectable
var borderColor: UIColor? {
    get {
        let color = UIColor(cgColor: layer.borderColor!)
        return color
    }
    set {
        layer.borderColor = newValue?.cgColor
    }
}

@IBInspectable
var shadowRadius: CGFloat {
    get {
        return layer.shadowRadius
    } …
Run Code Online (Sandbox Code Playgroud)

ios swift ibdesignable

4
推荐指数
1
解决办法
4106
查看次数

IBDesignable UIView 子类始终无法在 Interface Builder 中渲染

我看到了很多与此相关的问题,但答案很少(一个答案解决了之前的类似问题,但没有解决这个问题)。

问题

我有一个 IBDesignable 课程。它派生自 UIControl,但如果我派生自 UIView,也会发生同样的情况。

它基本上看起来像这样:

@IBDesignable
open class RVS_Checkbox: UIControl { ... }
Run Code Online (Sandbox Code Playgroud)

它工作得很好(链接指向这个项目,它是一个“插入式”UIControl 类)。

但它不会在 Interface Builder 中呈现。我收到此错误:

我得到的错误

这是错误,逐字:

The built product "/Volumes/Development/Developer/Xcode/DerivedData/RVS_Checkbox-ficjiiqrddckmjenmsrbrxvihaky/Build/Intermediates.noindex/IBDesignables/Products/Debug-appletvsimulator/RVS_Checkbox" does not exist in the file system. Make sure your built products contains either an application or a framework product.
Run Code Online (Sandbox Code Playgroud)

首先,这是一个 tvOS 错误,并且这是一个仅限 iOS 的类。我之前也遇到过类似的问题,这个答案为我解决了这个问题。我将代码包装在 #if...#else...#endif 中,如下所示:

#if os(iOS)
    @IBDesignable
    open class RVS_Checkbox: UIControl { ... }
#else
    @IBDesignable
    class RVS_Checkbox: UIView { }
#endif …
Run Code Online (Sandbox Code Playgroud)

interface-builder ios swift ibdesignable

4
推荐指数
1
解决办法
784
查看次数

使用@ IBDesigable/@ IBInspectable在故事板中的按钮上不显示转角半径

我有一个按钮的自定义类.

import UIKit

@IBDesignable
class CustomButton: UIButton {

    @IBInspectable var cornerRadiusValue: CGFloat = 10.0 {
        didSet {
            setUpView()
        }
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.layer.cornerRadius = 10.0
    }

    override func awakeFromNib() {
        setUpView()
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        setUpView()
    }

    func setUpView() {
        self.layer.cornerRadius = 10.0
    }

}
Run Code Online (Sandbox Code Playgroud)

但是角落半径没有显示在故事板中的按钮上.

我理解@IBInspectable只允许您更改检查器面板中的值.我想这不是我想要的.

当我创建一个具有该类的按钮时,我希望角落半径只显示在故事板中.我认为这就是@IBDesignable的作用.

uibutton uistoryboard swift ibdesignable ibinspectable

3
推荐指数
1
解决办法
3229
查看次数