小编Cra*_*aig的帖子

Objective-C中的typedef枚举是什么?

我不认为我从根本上理解它enum是什么,何时使用它.

例如:

typedef enum {
    kCircle,
    kRectangle,
    kOblateSpheroid
} ShapeType;
Run Code Online (Sandbox Code Playgroud)

这里真的被宣布了什么?

enums typedef objective-c

1081
推荐指数
8
解决办法
43万
查看次数

目标C中的方法语法

有人可以为我解释这个方法声明语法吗?在此函数中,返回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)

methods syntax objective-c

176
推荐指数
4
解决办法
9万
查看次数

Objective C中的选择器

首先,我不确定我真的明白选择器是什么.根据我的理解,它是方法的名称,您可以将其分配给类型为"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"...

objective-c selector

121
推荐指数
4
解决办法
12万
查看次数

BOOL到NSString

如果我有一个返回a的方法,BOOL我该怎么把它转换成一个NSString所以我可以在控制台中打印出来?

例如,我尝试这样做,这是行不通的:

NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Run Code Online (Sandbox Code Playgroud)

但我真的想将返回值转换为NSString.我知道它是一种原始数据类型,所以我不能在它上面调用方法.我是否必须单独创建一个字符串,然后在NSString的方法中使用Bool作为参数?

boolean objective-c nsstring

60
推荐指数
5
解决办法
9万
查看次数

使用UIScrollView用两根手指滚动

我在我的主视图,可同时接收应用程序touchesBegantouchesMoved,因此,需要在单手指触摸,并拖动.我想实现一个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)

iphone objective-c uiscrollview

42
推荐指数
5
解决办法
2万
查看次数

如何在编码窗口中删除错误消息?

在我编写完课程之前,我按下了Build,Xcode向我展示了一堆红色错误,这显然是因为我没有完成.

如何摆脱错误,以免它们出现在我的编码窗口中?

xcode

23
推荐指数
2
解决办法
8550
查看次数

import <cocoa/cocoa.h>出错

我第一次将来自另一个项目的类文件添加到我的新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)

我不明白这一点,因为完全相同的行出现在同一项目中的另一个类定义(控制器)中.

iphone objective-c

8
推荐指数
2
解决办法
2万
查看次数

覆盖setter方法,并获取信息

我有一个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)

setter initialization objective-c

7
推荐指数
1
解决办法
9611
查看次数

在Objective C中引用AudioToolbox的错误

我在一个简单的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)

objective-c

6
推荐指数
1
解决办法
7335
查看次数

使用drawRect中的Core Graphics绘制图像网格:

我的问题是:我有一个简单的块图像,我想制作一个网格.我在我的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的新手,并不真正了解如何使用图层来解决这个问题.

iphone core-animation core-graphics objective-c

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