小编wil*_*lc2的帖子

方法和函数之间有什么区别?

有人可以在OOP上下文中提供方法函数的简单解释吗?

language-agnostic oop methods terminology function

1665
推荐指数
23
解决办法
67万
查看次数

使用alloc init而不是new

学习Objective-C并阅读示例代码,我注意到对象通常是使用以下方法创建的:

SomeObject *myObject = [[SomeObject alloc] init];
Run Code Online (Sandbox Code Playgroud)

代替:

SomeObject *myObject = [SomeObject new];
Run Code Online (Sandbox Code Playgroud)

是否有理由这样做,因为我已经读到它们是等同的?

oop objective-c

337
推荐指数
5
解决办法
10万
查看次数

如何将atan2()映射到0-360度

atan2(y,x)在180°处具有不连续性,其顺时针切换到-180°..0°.

如何将值范围映射到0°.360°?

这是我的代码:

CGSize deltaPoint = CGSizeMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y);
float swipeBearing = atan2f(deltaPoint.height, deltaPoint.width);
Run Code Online (Sandbox Code Playgroud)

在给定startPoint和endPoint两个XY点结构的情况下,我正在计算滑动触摸事件的方向.该代码适用于iPhone,但任何支持atan2f()的语言都可以.

感谢您的帮助,包括一般解决方案和代码.

更新:我将erikkallen的答案变成了一个具有漂亮的长变量名的函数,所以我将在6个月后理解它.也许它会帮助其他一些iPhone noob.

float PointPairToBearingDegrees(CGPoint startingPoint, CGPoint endingPoint)
{
    CGPoint originPoint = CGPointMake(endingPoint.x - startingPoint.x, endingPoint.y - startingPoint.y); // get origin point to origin by subtracting end from start
    float bearingRadians = atan2f(originPoint.y, originPoint.x); // get bearing in radians
    float bearingDegrees = bearingRadians * (180.0 / M_PI); // convert to degrees
    bearingDegrees = (bearingDegrees > 0.0 ? bearingDegrees : (360.0 + …
Run Code Online (Sandbox Code Playgroud)

math atan2 quartz-2d

91
推荐指数
9
解决办法
12万
查看次数

我如何在iPhone上以编程方式为图像着色?

我想用颜色参考着色图像.结果应该类似于Photoshop中的"乘法"混合模式,其中白色将替换为色调:

替代文字

我会不断改变颜色值.

跟进:我会把代码放在我的ImageView的drawRect:方法中,对吗?

与往常一样,代码片段将极大地帮助我理解,而不是链接.

更新:使用Ramin建议的代码对UIImageView进行子类化.

我把它放在viewDidLoad中:我的视图控制器:

[self.lena setImage:[UIImage imageNamed:kImageName]];
[self.lena setOverlayColor:[UIColor blueColor]];
[super viewDidLoad];
Run Code Online (Sandbox Code Playgroud)

我看到了图像,但没有被染色.我还尝试加载其他图像,在IB中设置图像,并在我的视图控制器中调用setNeedsDisplay:

更新:drawRect:未被调用.

最后更新:我找到了一个正确设置了imageView的旧项目,所以我可以测试Ramin的代码,它就像一个魅力!

最后的最后更新:

对于那些刚学习Core Graphics的人来说,这是最简单的事情.

在您的子类UIView中:

- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColor(context, CGColorGetComponents([UIColor colorWithRed:0.5 green:0.5 blue:0 alpha:1].CGColor)); // don't make color too saturated

    CGContextFillRect(context, rect); // draw base

    [[UIImage imageNamed:@"someImage.png"] drawInRect: rect blendMode:kCGBlendModeOverlay alpha:1.0]; // draw image
}
Run Code Online (Sandbox Code Playgroud)

cocoa-touch tint image-processing uiimage ios

87
推荐指数
5
解决办法
6万
查看次数

如何确定C中整数的位数?

例如,

n = 3432, result 4

n = 45, result 2

n = 33215, result 5

n = -357, result 3
Run Code Online (Sandbox Code Playgroud)

我想我可以把它变成一个字符串然后得到字符串的长度,但这看起来很复杂和黑客.

c math

64
推荐指数
11
解决办法
7万
查看次数

是否有产生三角波的单线函数?

以类似的方式,模数生成锯齿波.它不必是连续的.

这就是我的意思:

int m = 10;
int x = 0;
int i = 0;
while (i < m*3) {
    printf("%d ", x);
    x++;
    x = x % m;
    i++;
}
Run Code Online (Sandbox Code Playgroud)

生成一个序列0..9,三次,如下所示:

锯齿波图

请注意,峰值右侧的斜率只是一个图形伪影

在这种情况下,单线是x = i ++%m


我想要的是这个:

三角波图

如果你知道其他波形的单线(正弦波,方波),那么也应该知道.

更新:每个人的答案都非常有用,我有一个后续问题.

将添加到三角波函数中以使线的斜率曲线变为或变为这样:

凸出的波形

谢谢大家,您的各种答案帮助我从更大的角度看问题.特别感谢Noldorin将方程扩展到二次曲线.

c

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

如何在iPhone上将NSTimeInterval分解为年,月,日,小时,分钟和秒?

我有一个跨越多年的时间间隔,我希望所有的时间组件从一年到几秒.

我的第一个想法是将一年中的时间间隔除以整数秒,从运行的总秒数中减去该值,将其除以一个月中的秒数,从运行总计中减去该值,依此类推.

这看起来很复杂,我已经读过,无论何时你做一些看起来错综复杂的事情,都可能有内置的方法.

在那儿?

我将Alex的第二种方法整合到我的代码中.

它位于我的界面中由UIDatePicker调用的方法中.

NSDate *now = [NSDate date];
NSDate *then = self.datePicker.date;
NSTimeInterval howLong = [now timeIntervalSinceDate:then];

NSDate *date = [NSDate dateWithTimeIntervalSince1970:howLong];
NSString *dateStr = [date description];
const char *dateStrPtr = [dateStr UTF8String];
int year, month, day, hour, minute, sec;

sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &sec);
year -= 1970;

NSLog(@"%d years\n%d months\n%d days\n%d hours\n%d minutes\n%d seconds", year, month, day, hour, minute, sec);
Run Code Online (Sandbox Code Playgroud)

当我将日期选择器设置为过去1年和1天的日期时,我得到:

1年1个月1天16小时0分20秒

这是1个月和16个小时.如果我将日期选择器设置为过去的1天,我的数量相同.

更新:我有一个应用程序,计算你的年龄,给定你的生日(从UIDatePicker设置),但它经常关闭.这证明存在不准确性,但我无法弄清楚它来自哪里,可以吗?

iphone time cocoa nstimeinterval

55
推荐指数
3
解决办法
5万
查看次数

Objective-C 2.0中的可选参数?

在Objective-C 2.0中,是否可以创建一个参数是可选的方法?也就是说,您可以进行如下方法调用:

[aFraction print];
Run Code Online (Sandbox Code Playgroud)

以及:

[aFraction print: someParameter];
Run Code Online (Sandbox Code Playgroud)

在同一个程序中.

Apple的Objective-C 2.0编程语言指南将Obj-C与Python进行了对比,似乎说这是不允许的.我还在学习,我想确定.如果它可能的,那么什么是语法,因为我的第二个代码示例不起作用.

更新: 好的,我刚刚制作了两个方法,都命名为"print".

-(void) print;
-(void) print: (BOOL) someSetting; 
Run Code Online (Sandbox Code Playgroud)

履行

-(void) print {
    [self print:0];
}

-(void) print: (BOOL) someSetting {
    BOOL sv;
    sv = someSetting;

    if ( sv ) {
        NSLog(@"cool stuff turned on");
    }
    else {
        NSLog(@"cool stuff turned off");
    }
}
Run Code Online (Sandbox Code Playgroud)

相关的计划行

    ...
    printParamFlag = TRUE;

// no parameter
    [aCodeHolder print];

// single parameter
    [aCodeHolder print:printParamFlag];
    ...
Run Code Online (Sandbox Code Playgroud)

我无法相信这有效.我有什么理由不这样做吗?

objective-c

52
推荐指数
4
解决办法
5万
查看次数

为什么自定义UIButton图像不会在Interface Builder中调整大小?

为什么自定义UIButton图像不会随按钮调整大小?

我将其视图模式设置为Scale to Fill in Interface Builder,但与UIImageView图像不同,它不尊重该设置.

我在错误的地方寻找还是不可能?

cocoa-touch interface-builder uibutton ios

44
推荐指数
7
解决办法
7万
查看次数

如何使用Core Animation在iPhone上的2个图像之间交叉淡入淡出

我这样做是为了学习如何使用iPhone上的Core Animation动画属性(不学习如何交叉淡化图像本身).

在SO上阅读类似的问题让我相信它可以通过动画UIImageView .contents属性来完成,如下所示:

UIImage *image1 = [UIImage imageNamed:@"someImage1.png"];
UIImage *image2 = [UIImage imageNamed:@"someImage2.png"];

self.imageView.image = image1;
[self.view addSubview:self.imageView];

CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
crossFade.duration = 5.0;
self.imageView.layer.contents = image2;
[self.imageView.layer addAnimation:crossFade forKey:@"animateContents"];
Run Code Online (Sandbox Code Playgroud)

我是否弄错了细节或者这是不可能的.

更新:上面的代码生成一个空白的UIImageView.当我更改此行时:

self.imageView.layer.contents = image2.CGImage;
Run Code Online (Sandbox Code Playgroud)

...我现在可以看到图像,但它不会淡入,只会立即出现.

iphone core-animation

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