我已经使用Quartz2D绘制iPod/iPhone的数学公式,下面是示例代码。如何在iOS设备中动态显示数学方程?
问题: 在我的应用程序中,我必须动态地显示大量这些方程。 我是否需要读取数据以便从plist(或某个其他存储器)动态绘制及其x/y坐标,然后绘制等式?现在我只是对数据和x/y坐标进行硬编码(,如下面的示例代码所示)。
- (void)drawRect:(CGRect)rect
{
// Left hand side Starts --
float xaxis = 3.0f;
// Before bracket
NSString *textString = @"L";
[textString drawAtPoint:CGPointMake(xaxis, 50.) withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:20]];
// Opening bracket
xaxis += 12.0f;
textString = @"(";
[textString drawAtPoint:CGPointMake(xaxis, 30.) withFont:[UIFont fontWithName:@"Helvetica" size:50]];
textString = @"N";
xaxis += 12.0f;
[textString drawAtPoint:CGPointMake(xaxis, 50.) withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:20]];
// Numerator part
unichar oneChar[] = {0x2206};
xaxis += 31.0f;
textString = getTextString(oneChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 37.) withFont:[UIFont fontWithName:@"Helvetica" size:22]];
unichar twoChar[] = {0x03C9};
xaxis += 15.0f;
textString = getTextString(twoChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 38.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
xaxis += 15.0f;
textString = @"k";
[textString drawAtPoint:CGPointMake(xaxis, 48.) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
// Line
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(myContext, 2);
CGContextSetStrokeColorWithColor(myContext, [UIColor blackColor].CGColor);
CGContextMoveToPoint(myContext, 45, 65);
CGContextAddLineToPoint(myContext, 110, 65);
CGContextStrokePath(myContext);
// Denominator part
xaxis -= 40.0f;
unichar threeChar[] = {0x03C9};
textString = getTextString(threeChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 64.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
xaxis += 15.0f;
textString = @"res";
[textString drawAtPoint:CGPointMake(xaxis, 74.) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
xaxis += 18.0f;
unichar fourChar[] = {0x0028};
textString = getTextString(fourChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 64.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
xaxis += 5.0f;
unichar fiveChar[] = {0x03B8};
textString = getTextString(fiveChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 64.) withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:20]];
xaxis += 15.0f;
textString = @")";
[textString drawAtPoint:CGPointMake(xaxis, 64.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
// Closing bracket
xaxis += 8.0f;
textString = @")";
[textString drawAtPoint:CGPointMake(xaxis, 30.) withFont:[UIFont fontWithName:@"Helvetica" size:50]];
// Equal to sign
xaxis += 15.0f;
unichar sixChar[] = {0x003D};
textString = getTextString(sixChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 50.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
// Right hand side Starts --
// Numerator part
xaxis += 15.0f;
textString = @"sin";
[textString drawAtPoint:CGPointMake(xaxis, 42.) withFont:[UIFont fontWithName:@"Helvetica" size:17]];
xaxis += 20.0f;
textString = @"2";
[textString drawAtPoint:CGPointMake(xaxis, 38.) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
// Inner opening bracket
xaxis += 10.0f;
textString = @"(";
[textString drawAtPoint:CGPointMake(xaxis, 37.) withFont:[UIFont fontWithName:@"Helvetica" size:22]];
xaxis += 8.0f;
textString = @"N";
[textString drawAtPoint:CGPointMake(xaxis, 38.) withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:20]];
xaxis += 18.0f;
unichar sevenChar[] = {0x03C0};
textString = getTextString(sevenChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 40.) withFont:[UIFont fontWithName:@"Helvetica" size:17]];
xaxis += 12.0f;
unichar eightChar[] = {0x2206};
textString = getTextString(eightChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 36.) withFont:[UIFont fontWithName:@"Helvetica" size:21]];
xaxis += 15.0f;
unichar nineChar[] = {0x03C9};
textString = getTextString(nineChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 38.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
xaxis += 15.0f;
textString = @"k";
[textString drawAtPoint:CGPointMake(xaxis, 47.) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
xaxis += 8.0f;
textString = @"/";
[textString drawAtPoint:CGPointMake(xaxis, 38.) withFont:[UIFont fontWithName:@"Helvetica" size:24]];
xaxis += 8.0f;
unichar tenChar[] = {0x03C9};
textString = getTextString(tenChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 38.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
xaxis += 15.0f;
textString = @"res";
[textString drawAtPoint:CGPointMake(xaxis, 48.) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
xaxis += 18.0f;
textString = @"(";
[textString drawAtPoint:CGPointMake(xaxis, 38.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
xaxis += 5.0f;
unichar elevenChar[] = {0x03B8};
textString = getTextString(elevenChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 38.) withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:20]];
xaxis += 12.0f;
textString = @")";
[textString drawAtPoint:CGPointMake(xaxis, 38.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
// Inner closing bracket
xaxis += 6.0f;
textString = @")";
[textString drawAtPoint:CGPointMake(xaxis, 37.) withFont:[UIFont fontWithName:@"Helvetica" size:22]];
// Line
CGContextSetLineWidth(myContext, 2);
CGContextSetStrokeColorWithColor(myContext, [UIColor blackColor].CGColor);
CGContextMoveToPoint(myContext, 138, 65);
CGContextAddLineToPoint(myContext, 318, 65);
CGContextStrokePath(myContext);
// Denominator part
xaxis -= 175.0f;
textString = @"N";
[textString drawAtPoint:CGPointMake(xaxis, 65.) withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:20]];
xaxis += 18.0f;
textString = @"2";
[textString drawAtPoint:CGPointMake(xaxis, 63.) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
xaxis += 8.0f;
textString = @"sin";
[textString drawAtPoint:CGPointMake(xaxis, 68.) withFont:[UIFont fontWithName:@"Helvetica" size:17]];
xaxis += 20.0f;
textString = @"2";
[textString drawAtPoint:CGPointMake(xaxis, 63.) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
// Inner opening bracket
xaxis += 10.0f;
textString = @"(";
[textString drawAtPoint:CGPointMake(xaxis, 64.) withFont:[UIFont fontWithName:@"Helvetica" size:22]];
xaxis += 8.0f;
unichar twelveChar[] = {0x03C0};
textString = getTextString(twelveChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 68.) withFont:[UIFont fontWithName:@"Helvetica" size:17]];
xaxis += 12.0f;
unichar thirteenChar[] = {0x2206};
textString = getTextString(thirteenChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 65.) withFont:[UIFont fontWithName:@"Helvetica" size:21]];
xaxis += 15.0f;
unichar fourteenChar[] = {0x03C9};
textString = getTextString(fourteenChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 67.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
xaxis += 15.0f;
textString = @"k";
[textString drawAtPoint:CGPointMake(xaxis, 75.) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
xaxis += 8.0f;
textString = @"/";
[textString drawAtPoint:CGPointMake(xaxis, 64.) withFont:[UIFont fontWithName:@"Helvetica" size:24]];
xaxis += 8.0f;
unichar fifteenChar[] = {0x03C9};
textString = getTextString(fifteenChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 67.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
xaxis += 15.0f;
textString = @"res";
[textString drawAtPoint:CGPointMake(xaxis, 75.) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
xaxis += 18.0f;
textString = @"(";
[textString drawAtPoint:CGPointMake(xaxis, 66.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
xaxis += 5.0f;
unichar sixteenChar[] = {0x03B8};
textString = getTextString(sixteenChar, 1);
[textString drawAtPoint:CGPointMake(xaxis, 66.) withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:20]];
xaxis += 12.0f;
textString = @")";
[textString drawAtPoint:CGPointMake(xaxis, 66.) withFont:[UIFont fontWithName:@"Helvetica" size:20]];
// Inner closing bracket
xaxis += 6.0f;
textString = @")";
[textString drawAtPoint:CGPointMake(xaxis, 64.) withFont:[UIFont fontWithName:@"Helvetica" size:22]];
// Extra text for information
xaxis = 6.0f;
textString = @"Above is the example of an equation drawn using";
[textString drawAtPoint:CGPointMake(xaxis, 120.) withFont:[UIFont fontWithName:@"Helvetica" size:14]];
xaxis = 6.0f;
textString = @"Quartz2D";
[textString drawAtPoint:CGPointMake(xaxis, 140.) withFont:[UIFont fontWithName:@"Helvetica" size:14]];
}
static NSString *getTextString(unichar chars[], int charLength)
{
NSString *uniString = [NSString stringWithCharacters:chars length: charLength];
return uniString;
}
我正在寻找其他方法在iPod/iPhone中渲染数学方程 - 并发现我们可以在UIWebView中使用MathML来显示它。那么在UIWebView中使用Quartz2D(我使用上面的过程)和MathML之间有什么区别。 – Aman 2012-01-14 14:41:59
任何人 - 可以请回复。谢谢。 – Aman 2012-01-17 02:59:59