Я не вижу проблемы с Вашим подходом. Я обычно использую одиночный элемент для обработки этой ситуации:
// MyCommon.h:
@interface MyCommon
class MyCommon : NSObject
{
int user;
};
@property(assign) int user;
+ (MyCommon *)singleton;
@end
// MyCommon.m:
@implementation MyCommon
static MyCommon * MyCommon_Singleton = nil;
+ (MyCommon *)singleton
{
if (nil == MyCommon_Singleton)
{
MyCommon_Singleton = [[MyCommon_Singleton alloc] init];
}
return MyCommon_Singleton;
}
@end
MyCommon
одиночный элемент тогда используется где угодно в моем приложении следующим образом:
int user = [MyCommon singleton].user;
Я забыл масштабировать область печати в соответствии с изменяемым размером фрагмента ролика. См. Рабочее решение ниже:
function printMovieClip(clip:MovieClip) {
var printJob:PrintJob = new PrintJob();
var numPages:int = 0;
var printArea:Rectangle;
var printHeight:Number;
var printY:int = 0;
if ( printJob.start() ) {
/* Resize movie clip to fit within page width */
if (clip.width > printJob.pageWidth) {
clip.width = printJob.pageWidth;
clip.scaleY = clip.scaleX;
}
/* Store reference to print area in a new variable! Will save on scaling calculations later... */
printArea = new Rectangle(0, 0, printJob.pageWidth/clip.scaleX, printJob.pageHeight/clip.scaleY);
numPages = Math.ceil(clip.height / printJob.pageHeight);
/* Add pages to print job */
for (var i:int = 0; i < numPages; i++) {
printJob.addPage(clip, printArea);
printArea.y += printArea.height;
}
/* Send print job to printer */
printJob.send();
/* Delete job from memory */
printJob = null;
}
}
printMovieClip( testMC );
Спасибо за ваш дух открытого исходного кода! Основываясь на вашей большой работе, я реализую его и немного улучшаю, чтобы решить мою практическую проблему печати MovieClip. Главный прогресс, которого я добился, - это разработка способа печати MovieClip с несколькими кадрами только за одну отправку задания на печать. Конечно, я решил вопрос «распечатать всю ширину Movieclip». Поскольку SWF хранит содержимое в виде векторной графики, вам нужно убедиться, что clip.height = printArea.height; clip.width = printArea.width;
. Это простой способ:
1//MC printing Function
2private function printMovieClip(clip:MovieClip):void
3{
4 var printJob:PrintJob=new PrintJob();
5 var printArea:Rectangle;
6 if (!printJob.start())
7 return;
8 //The page you choose to print ,"selectPages" is a mx:combox object i used to support printing one frame of MC
9 var printPage:int=selectPages.selectedItem.data;
10 if (printPage == 0) //print all frames of the MovieClip
11 {
12 for (var i:int=1; i <= clip.totalFrames; i++)
13 {
14 clip.gotoAndStop(i);
15 /* Resize movie clip to fit within page width */
16 clip.width=printJob.pageWidth;
17 clip.scaleY=clip.scaleX;
18 /* Store reference to print area in a new variable! Will save on scaling */
19 printArea=new Rectangle(0, 0, printJob.pageWidth, printJob.pageHeight);
20 //numPages=Math.ceil(clip.height / printJob.pageHeight);
21 /* Add pages to print job */
22 printJob.addPage(clip, printArea);
23 }
24 }
25 else //print the selected frame
26 {
//goto the selected frame firstly
27 clip.gotoAndStop(printPage);
28 /* Resize movie clip to fit within page width */
29 clip.width=printJob.pageWidth;
30 clip.scaleY=clip.scaleX;
31 printArea=new Rectangle(0, 0, printJob.pageWidth, printJob.pageHeight);
32 /* Add pages to print job */
33 printJob.addPage(clip, printArea);
34 }
35
36 /* Send print job to printer */
37 printJob.send();
38 /* Delete job from memory */
39 printJob=null;
40
41 }
Если вам нужна дополнительная информация, вы можете взглянуть на мое изображение клипа (и если вы немного понимаете китайский): все это в моем блоге . Также есть эскизы видеоклипов (все еще китайский).