我不认为我从根本上理解它enum是什么,何时使用它.
例如:
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
Run Code Online (Sandbox Code Playgroud)
这里真的被宣布了什么?
有人可以为我解释这个方法声明语法吗?在此函数中,返回UIPickerView(iPhone上的老虎机UI)的行数.根据我的理解,Method被称为' pickerView',并返回一个NSInteger.
它传入一个指向UIPickerview的指针,称为' pickerView'...首先,为什么该方法与参数名称相同?
接下来有一个名为component的NSInteger参数,它告诉我们计算行的哪个组件.决定哪个是在方法体内的逻辑.
什么是' numberOfRowsInComponent?它似乎描述了我们返回的值,但它位于参数的中间.
- (NSInteger) pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
if (component == kStateComponent)
return [self.states count];
return[self.zips count];
}
Run Code Online (Sandbox Code Playgroud) 首先,我不确定我真的明白选择器是什么.根据我的理解,它是方法的名称,您可以将其分配给类型为"SEL"的类,然后运行诸如respondToSelector之类的方法来查看接收器是否实现了该方法.有人可以提供更好的解释吗?
其次,到目前为止,我有以下代码:
NSString *thing = @"Hello, this is Craig";
SEL sel = @selector(lowercaseString:);
NSString *lower = (([thing respondsToSelector:sel]) ? @"YES" : @"NO");
NSLog (@"Responds to lowercaseString: %@", lower);
if ([thing respondsToSelector:sel]) //(lower == @"YES")
NSLog(@"lowercaseString is: %@", [thing lowercaseString]);
Run Code Online (Sandbox Code Playgroud)
但是,即使thing显然是一种NSString,并且应该响应lowercaseString,我也无法让'respondsToSelector'条件返回"YES"...
如果我有一个返回a的方法,BOOL我该怎么把它转换成一个NSString所以我可以在控制台中打印出来?
例如,我尝试这样做,这是行不通的:
NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Run Code Online (Sandbox Code Playgroud)
但我真的想将返回值转换为NSString.我知道它是一种原始数据类型,所以我不能在它上面调用方法.我是否必须单独创建一个字符串,然后在NSString的方法中使用Bool作为参数?
我在我的主视图,可同时接收应用程序touchesBegan和touchesMoved,因此,需要在单手指触摸,并拖动.我想实现一个UIScrollView,我有它的工作,但它覆盖了拖动,因此我的contentView永远不会收到它们.我想实现一个UIScrollview,其中双指拖动指示滚动,并且单指拖动事件被传递到我的内容视图,因此它正常执行.我需要创建自己的子类UIScrollView吗?
这是我appDelegate实现的代码UIScrollView.
@implementation MusicGridAppDelegate
@synthesize window;
@synthesize viewController;
@synthesize scrollView;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
//[application setStatusBarHidden:YES animated:NO];
//[window addSubview:viewController.view];
scrollView.contentSize = CGSizeMake(720, 480);
scrollView.showsHorizontalScrollIndicator = YES;
scrollView.showsVerticalScrollIndicator = YES;
scrollView.delegate = self;
[scrollView addSubview:viewController.view];
[window makeKeyAndVisible];
}
- (void)dealloc {
[viewController release];
[scrollView release];
[window release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud) 在我编写完课程之前,我按下了Build,Xcode向我展示了一堆红色错误,这显然是因为我没有完成.
如何摆脱错误,以免它们出现在我的编码窗口中?
我第一次将来自另一个项目的类文件添加到我的新iPhone窗口.该类是一个定义多边形的简单类,以及NSObject的子类.作为Objective C类的标准模板的一部分,此类定义导入Cocoa.h
#import <Cocoa/Cocoa.h>
Run Code Online (Sandbox Code Playgroud)
但是,只要添加这个类,我就会收到错误
Cocoa/Cocoa.h:No such file or directory.
Run Code Online (Sandbox Code Playgroud)
我不明白这一点,因为完全相同的行出现在同一项目中的另一个类定义(控制器)中.
我有一个setter方法(setMinimumNumberOfSides),我想在使用synthesize后覆盖它.在其中,我对实例变量进行约束以确保int在某些范围内.
稍后在自定义init方法中,我正在设置另一个实例变量(numberOfSides),但我需要确保在bounds中正确设置了minimumNumberOfSides和maximumNumberOfSides.我尝试将setter上的返回值更改为BOOL,因此如果成功/失败,我可以传回YES或NO,但是这会创建一个冲突的方法,我猜是因为我正在使用合成并覆盖setter.
如何轻松获取信息以检查setter是否被调用并成功返回?
-(void)setNumberOfSides:(int)sides
{
if ((sides < maximumNumberOfSides) && (sides > minimumNumberOfSides))
{
numberOfSides = sides;
}
else
NSLog (@"Invalid number of sides: %d is outside the constraints allowed", sides);
}
-(void)setMinimumNumberOfSides:(int)minimum
{
if (minimum > 2)
minimumNumberOfSides = minimum;
}
-(void)setMaximumNumberOfSides:(int)maximum
{
if (maximum <= 12)
maximumNumberOfSides = maximum;
}
-(id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max
{
if (self = [super init])
{
self.minimumNumberOfSides = min;
self.maximumNumberOfSides = max;
self.numberOfSides = sides;
}
return self;
}
Run Code Online (Sandbox Code Playgroud) 我在一个简单的Roulett应用程序中遇到以下错误,我正在尝试播放一些wav文件.我不确定错误是什么意思,因为代码中没有警告标志,我已经导入了
这是错误:
未定义的符号:
"_ AudioServicesCreateSystemSoundID",引自: - CustomPickerViewController.o中的[CustomPickerViewController playWinSound] - CustomPickerViewController.o中的[CustomPickerViewController spin:]"_ AudioAvicesServicesSystemSound",引用自: - CustomPickerViewController.o中的[CustomPickerViewController playWinSound] - [CustomPickerViewController spin: ]在CustomPickerViewController.o ld:未找到符号collect2:ld返回1退出状态
"_AudioServicesCreateSystemSoundID",引自: - CustomPickerViewController.o中的[CustomPickerViewController playWinSound] - CustomPickerViewController.o中的[CustomPickerViewController spin:]"_AudioServicesPlaySystemSound",引自: - CustomPickerViewController.o中的[CustomPickerViewController playWinSound] - CustomPickerViewController.o中的[CustomPickerViewController spin:] ld:找不到符号collect2:ld返回1退出状态
以下是代码:
#import "CustomPickerViewController.h"
#import <AudioToolbox/AudioToolbox.h>
@implementation CustomPickerViewController
@synthesize picker;
@synthesize winLabel;
@synthesize column1;
@synthesize column2;
@synthesize column3;
@synthesize column4;
@synthesize column5;
@synthesize button;
- (void)showButton
{
button.hidden = NO;
}
-(void)playWinSound
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"win" ofType:@"wav"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound (soundID); …Run Code Online (Sandbox Code Playgroud) 我的问题是:我有一个简单的块图像,我想制作一个网格.我在我的UIView中创建了一个CGPoints数组.然后我用了
blackImage = [UIImage imageNamed:@"black.png"];
Run Code Online (Sandbox Code Playgroud)
然后
- (void)drawRect:(CGRect)rect {
for (int j = 0 ; j <= 11; j++)
{
for (int i = 0 ; i <= 7; i++)
{
[blackImage drawAtPoint: (CGPointFromString([[self.points objectAtIndex:j] objectAtIndex:i]))];
}
}
[whiteImage drawAtPoint:(CGPointMake((CGFloat)(floor((touchX+0.001)/40)*40), (CGFloat)(floor((touchY+0.001)/40))*40))];
// [whiteImage drawAtPoint:(CGPointMake(240.0, 320.0))];
}
Run Code Online (Sandbox Code Playgroud)
其中TouchX和TouchY是用户触摸屏幕的CGPoints.所以我基本上在用户触摸的网格上显示不同的图像.
首先,问题是每次调用DrawRect时都会重绘整个屏幕.我希望能够保存状态(通过更改BOOL的数组?)并让用户在屏幕上拖动并更改多个图像.但是,当我在DrawRect之外时,我无法在UImage上使用"drawAtPoint"方法.(抛出错误).
无论如何,我开始研究CoreAnimation和Quartz文档,并且真的很困惑.我不确定我是否应该为每个砖块创建多个UIViews(似乎过多),或者是CALayers或CGLayers的网格......我认为这很简单,我想做什么......但我真的不明白图层,以及使用CALayer和CGLayer之间的区别.显然"所有UIViews都是层支持的"这是什么意思?
我对如何实现这一点感到很遗憾.我基本上想要在网格中交换图像,以便用户可以在屏幕上"绘制"并切换图像.
我尝试使用[self setNeedsDisplayinRect]实现此功能,并传入用户手指下的CGRect.然而,这仍然是在TouchesMoved中调用DrawRect,它给了我想要的效果,但在iPhone上却太慢了.使用CALayers是否有更有效的方法来实现相同的效果?我是Core Animation的新手,并不真正了解如何使用图层来解决这个问题.