有人可以在OOP上下文中提供方法与函数的简单解释吗?
学习Objective-C并阅读示例代码,我注意到对象通常是使用以下方法创建的:
SomeObject *myObject = [[SomeObject alloc] init];
Run Code Online (Sandbox Code Playgroud)
代替:
SomeObject *myObject = [SomeObject new];
Run Code Online (Sandbox Code Playgroud)
是否有理由这样做,因为我已经读到它们是等同的?
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) 我想用颜色参考着色图像.结果应该类似于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) 例如,
n = 3432, result 4
n = 45, result 2
n = 33215, result 5
n = -357, result 3
Run Code Online (Sandbox Code Playgroud)
我想我可以把它变成一个字符串然后得到字符串的长度,但这看起来很复杂和黑客.
以类似的方式,模数生成锯齿波.它不必是连续的.
这就是我的意思:
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将方程扩展到二次曲线.
我有一个跨越多年的时间间隔,我希望所有的时间组件从一年到几秒.
我的第一个想法是将一年中的时间间隔除以整数秒,从运行的总秒数中减去该值,将其除以一个月中的秒数,从运行总计中减去该值,依此类推.
这看起来很复杂,我已经读过,无论何时你做一些看起来错综复杂的事情,都可能有内置的方法.
在那儿?
我将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设置),但它经常关闭.这证明存在不准确性,但我无法弄清楚它来自哪里,可以吗?
在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)
我无法相信这有效.我有什么理由不这样做吗?
为什么自定义UIButton图像不会随按钮调整大小?
我将其视图模式设置为Scale to Fill in Interface Builder,但与UIImageView图像不同,它不尊重该设置.
我在错误的地方寻找还是不可能?
我这样做是为了学习如何使用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)
...我现在可以看到图像,但它不会淡入,只会立即出现.