我基本上想要使用Apple的MoveMe示例中的PlacardView.m和PlacardView.h,在主BlowViewController上添加它作为子视图
PlacardView.m
#import "PlacardView.h"
@implementation PlacardView
@synthesize placardImage;
- (id)init {
// Retrieve the image for the view and determine its size
UIImage *image = [UIImage imageNamed:@"Placard.png"];
CGRect frame = CGRectMake(0, 0, image.size.width, image.size.height);
// Set self's frame to encompass the image
self = [self initWithFrame:frame];
if (self) {
self.opaque = NO;
placardImage = image;
}
return self;
}
- (void)dealloc {
[placardImage release];
[super dealloc];
}
@end
PlacardView.h
@interface PlacardView : UIView {
UIImage *placardImage;
}
@property (nonatomic, retain) UIImage *placardImage;
// Initializer for this object
- (id)init;
@end
这是我的MicBlowViewController.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <CoreAudio/CoreAudioTypes.h>
@class PlacardView;
@interface MicBlowViewController : UIViewController {
AVAudioRecorder *recorder;
NSTimer *levelTimer;
double lowPassResults;
PlacardView *placardView;
}
@property(nonatomic, retain) PlacardView *placardView;
- (void)setUpPlacardView;
- (void)levelTimerCallback:(NSTimer *)timer;
@end
这是部分MicBlowViewController.m ..有一个函数viewDidLoad但是它与视图无关..它只是一个录音计时器,所以我没有粘贴那个
#import "MicBlowViewController.h"
#import "PlacardView.h"
@implementation MicBlowViewController
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setUpPlacardView];
}
return self;
}
- (void)setUpPlacardView {
// Create the placard view -- its init method calculates its frame based on its image
PlacardView *aPlacardView = [[PlacardView alloc] init];
self.placardView = aPlacardView;
[aPlacardView release];
placardView.center = self.center;
[self addSubview:placardView];
}
我得到的错误是“属性'中心'找不到类型对象”MicBlowViewController *“”
请帮忙。
答案 0 :(得分:2)
更改此行:
placardView.center = self.center;
到此:
placardView.center = self.view.center;
self
是UIViewController,但你想要它的视图中心。
答案 1 :(得分:2)
Ayush,你的代码让我感到有些困惑。
控制器的代码似乎有几个问题。
如果使用Interface Builder文件,UIViewController没有initWithFrame
方法,而是标准init
或initWithNibName:bundle:
方法。
我看到你复制并粘贴了Apple的MoveMe示例中的代码,但请记住,将代码复制到控制器中的MoveMeView
实际上是 UIView ,不是 UIViewController 。
试试这个:
#import "MicBlowViewController.h"
#import "PlacardView.h"
@implementation MicBlowViewController
- (void)viewDidLoad {
[self setUpPlacardView];
// Additonal code with your timer etc
}
- (void)setUpPlacardView {
// Create the placard view -- its init method calculates its frame based on its image
PlacardView *aPlacardView = [[PlacardView alloc] init];
self.placardView = aPlacardView;
[aPlacardView release];
[self.view addSubview:placardView];
self.placardView.center = self.view.center;
}
您可能还需要实施loadView
的{{1}}方法。
您可能需要查看View Programming Guide以及UIViewController class reference。
答案 2 :(得分:1)
有同样的问题。几乎所有的示例代码都使用了单独创建的视图控制器和视图(我猜测Xcode的工作方式)。 Xcode现在创建ViewController以及视图作为属性(您在GUI上看到的视图)。踢球者是你不能访问这个视图的代码(afaict ......我问过并告诉他阅读手册)。那么当你看不到它的代码时,如何将示例代码(在视图中)放到这个视图中?
我找到了两种方法:
创建与示例视图中的代码相同的新视图。然后,单击故事板,在GUI中查看ViewController的默认视图。在右侧窗格中,单击身份检查器(左侧第三个无意义的形状)。你会看到Class:UIView。将UIView一词替换为您创建的视图的名称。 ViewController现在将加载您的视图。另一个问题是,当你创建视图时,它会获得方法initWithFrame,它表示它运行init代码。它不是。你需要创建initWithCoder(google this)并将你的初始化代码放在这里。
另一个选项(可能是正确的方法)是使用ViewController代码将您的视图(带有示例代码)添加为默认视图的子视图,例如在ViewController.m中
Bus *newBus = [[Bus alloc] init];
[self.view addSubview:newBus];
即。 self是ViewController,view是它的默认视图,即ViewController的属性