我发现了一个教程,该教程完全可以在我现有的Objective-C项目中完成我想做的事情,但是它是用Swift编写的。我了解Swift中的所有内容,但遇到了一个噩梦般的时光,将“UIView's
初始化”转换为“ Objective-C”。这应该非常简单,但是我无法弄清楚。
我的代码不会崩溃,但是不会加载任何东西。UIViewController
当我尝试加载UIView
子类时,我在其中设置了一个断点,以查看发生了什么,这是我所看到的:
(lldb) po self.boxSize
75
(lldb) po self.holderView.frame
(origin = (x = 0, y = 0), size = (width = 0, height = 0))
(origin = (x = 0, y = 0), size = (width = 0, height = 0))
(lldb) po self.holderView
nil
这是我试图在Objective-C中“复制”的视图。
HolderView.swift:
class HolderView: UIView {
var parentFrame :CGRect = CGRectZero
weak var delegate:HolderViewDelegate?
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = Colors.clear
}
required init(coder: NSCoder) {
super.init(coder: coder)
}
// A bunch of class methods
}
这是我的“翻译”的Objective-C .h / .m文件:
HolderView.h:
#import <UIKit/UIKit.h>
@protocol HolderViewDelegate <NSObject>
// delegate methods
@ end
@interface HolderView : UIView
@property (nonatomic, weak) id <HolderViewDelegate> delegate;
@property (nonatomic) CGRect frame;
@property (nonatomic) CGRect parentFrame;
HolderView.m:
- (instancetype)initWithFrame:(CGRect)frame
{
self.parentFrame = CGRectZero;
self = [super initWithFrame:frame];
if (self) {
[super setFrame:self.parentFrame];
self.backgroundColor = [UIColor orangeColor]; // Added to see if it's working
NSLog(@"anyone home?");
}
return self;
}
这是Swift和Objective-CUIViewControllers
添加以下代码的代码UIView
:
ViewController.swift
func addHolderView() {
let boxSize: CGFloat = 75.0
holderView.frame = CGRect(x: view.bounds.width / 2 - boxSize / 2,
y: view.bounds.height / 2 - boxSize / 2,
width: boxSize,
height: boxSize)
holderView.parentFrame = view.frame
holderView.delegate = self
view.addSubview(holderView)
holderView.addOval()
}
这是我的“翻译后的” Objective-C视图控制器:
- (void)addHolderView {
self.boxSize = 75.0; // I added as a global variable, as local returned NULL when I tried locally
self.holderView.frame = CGRectMake(self.view.bounds.size.height / 2 - self.boxSize / 2,
self.view.bounds.size.width / 2 - self.boxSize / 2,
self.boxSize,
self.boxSize);
self.holderView.parentFrame = self.view.frame;
self.holderView = [self.holderView initWithFrame:self.holderView.frame];
self.holderView.delegate = self;
NSLog(@"addHolderView called");
[self.view addSubview:self.holderView];
}
感谢您的阅读。
这段代码怎么样。
- (void)addHolderView {
self.boxSize = 75.0; // I added as a global variable, as local returned NULL when I tried locally
CGRect frame = CGRectMake(self.view.bounds.size.height / 2 - self.boxSize / 2,
self.view.bounds.size.width / 2 - self.boxSize / 2,
self.boxSize,
self.boxSize);
self.holderView = [[HolderView alloc] initWithFrame: frame];
self.holderView.parentFrame = self.view.frame;
self.holderView.delegate = self;
NSLog(@"addHolderView called");
[self.view addSubview:self.holderView];
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句