Quá Trình Xử Lý Và Liên Kết Các Đối Tượng Của Các Lớp Với Nhau

Một phần của tài liệu Xây dựng công cụ cho phép thiết kế ứng dụng SCADA vừa và nhỏ trên nền iOS (Trang 95 - 100)

5.7 Trend Form

5.7.6 Quá Trình Xử Lý Và Liên Kết Các Đối Tượng Của Các Lớp Với Nhau

Sau khi người dùng chọn Single Trend hay Multi Trend thì ta tạo ra một vùng hiển thị là đối tượng của lớp TrendSingleView. Nếu là 2 thì chỉ cần gọi phương thức này 2 lần với 2 frame khác nhau (frame chỉ vị trí và kích thước của đối tượng).

Tại đây đối tượng trendSingleView thuộc lớp TrendSingleView và được gán tới 2

TapGestureRecognizer, trong đó 1 là chạm đơn và 1 là chạm 2 lần. Lý do phải dùng tới 2 TapGestureRecognizer là vì khi ta chạm 1 lần vào vùng hiển thị trend thì phần table view (hiễn thị trendTag tương ứng với trend) sẽ được hiển thị dữ liệu là các thuộc tính cần thiết của trendTag ứng với trend vừa được chạm (được sũ dụng trong trường hợp có 2 trend hoạt động cùng 1 lúc) và hiện chế độ hoạt động của trend. Còn nếu chạm 2 lần thì sẽ hiện cửa sỗ cho phép thay đổi thuộc tính cơ bản của trend ví dụ như tiêu đề, tên của các trục, số mẫu ..v..v.. Đoạn code thể hiện điều đó.

- (void) initSingleTrendWithFrame: (CGRect)frame{

tapSingleTrendGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapSingleTrend:)];

doubleTapSingleTrendGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapSingleTrend:)]; doubleTapSingleTrendGesture.numberOfTapsRequired = 2; [tapTrends addObject:tapSingleTrendGesture];

[doubleTapTrends addObject:doubleTapSingleTrendGesture]; trendSingleView = [[TrendSingleView alloc] init];

trendSingleView.view.frame = frame;//CGRectMake(0, 0, 1024, 400); [self.view addSubview:trendSingleView.view];

trendSingleView.view.tag = idofTrend; idofTrend++;

[trends addObject:trendSingleView];lớp [trendSingleView.view

addGestureRecognizer:tapSingleTrendGesture]; [trendSingleView.view

addGestureRecognizer:doubleTapSingleTrendGesture]; }

Page 86

1 chạm:

2 chạm liên tục:

-(void) doubleTapSingleTrend: (UITapGestureRecognizer *)doubleTapedSingleTrendGesture{

int trendID = doubleTapedSingleTrendGesture.view.tag;

//Double Click To Trend For Design, Then Take This Trend To Be trendInProcess

trendInProcess = [trendsobjectAtIndex:trendID];

designTrendView = [[DesignTrendViewControlleralloc] init];

designTrendView.modalPresentationStyle = UIModalPresentationFormSheet;

designTrendView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[selfpresentViewController:designTrendViewanimated:YEScompletion:NULL];

designTrendView.view.superview.frame = CGRectMake(350, 150, 370, 327);

designTrendView.delegate = self;

}

-(void) tapSingleTrend: (UITapGestureRecognizer *) tapedSingleTrendGesture{ int trendID = tapedSingleTrendGesture.view.tag;

//Click To Trend For See Tag, Then Take This Trend To Be trendInProcess trendInProcess = [trends objectAtIndex:trendID];

[self.tableView reloadData];

if (trendInProcess.expandPlot == true){

[self.bt_expandOrContract setTitle:@"Contract" forState:UIControlStateNormal]; }

else{

[self.bt_expandOrContract setTitle:@"Expand" forState:UIControlStateNormal]; }

Page 87

Trong đó designTrendView là đối tượng thuộc lớp DesignTrendViewController, cách tạo lớp này cũng như đoạn code để hiện cửa sỗ này lên thì đã được trình bày ở các phần trước.

Sau khi chọn các thuộc tính mới cho trend và bấm nút Ok thì sẽ có 1 phương thức được trả về cho hàm chính.

Tại đây sẽ cập nhật trend với các thuộc tính mới vừa được thay đổi. Ở đây có đoạn code [self.tableView reloadData] là để table view cập nhật và hiện thị lại đúng chu kỳ của các trend tag (vì chu kỳ của trend tag bằng với chu kỳ trend).

Tiếp theo là phần xử lý table view và xử lý dữ liệu để hiện thị các trend tag của trend được chọn.

Các phương thức cần biết

-(void) didDesignTrend:(DesignTrendViewController *)trendDidDesign{

//[trendSingleView configureGraphWithTitle:trendDidDesign.txt_trendTitle.text];

[trendInProcesssetGraphTitle:trendDidDesign.txt_trendTitle.text

numberSample:trendDidDesign.txt_noSample.text.intValue];

[trendInProcessconfigureAxesWithXAxisTitle:trendDidDesign.txt_xAxisTitle.text

yAxisTitle:trendDidDesign.txt_yAxisTitle.text];

[trendInProcess

changeXAxisLabelWithMajorIncrement:(5*trendDidDesign.txt_period.text.floatValue)

minorIncrement:trendDidDesign.txt_period.text.floatValuexMax:

(trendDidDesign.txt_period.text.floatValue * trendDidDesign.txt_noSample.text.floatValue)];

[trendInProcesschangeYAxisLabelWithMajorIncrement:10minorIncrement:2yMax:100];

trendInProcess.period = trendDidDesign.txt_period.text;

trendInProcess.majorIncrement = (5*trendDidDesign.txt_period.text.floatValue);

trendInProcess.minorIncrement = trendDidDesign.txt_period.text.floatValue;

//[trendInProcess setAutoScaleWithNumberOfPlot:3];

[self.tableViewreloadData];

Page 88

Khai báo số lượng cột của table view. Đoạn code cập nhật và hiển thị lại thuộc tính của trend tag trên table view nó sẽ được gọi lại nhiều lần với số lần bằng với số cột của nó.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

staticNSString *CellIdentifier = @"Cell";

TableViewCell *Cell = [tableView

dequeueReusableCellWithIdentifier:CellIdentifier];

if (!Cell) {

Cell = [[TableViewCellalloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

}

// Pay Your Attention In Here

TagTrend *tagTrendTemp = [trendInProcess.tagTrends

objectAtIndex:indexPath.row];

Cell.txt_tagName.text = [NSString

stringWithFormat:@"%@",tagTrendTemp.name];

Cell.txt_tagSource.text = [NSString

stringWithFormat:@"%@",tagTrendTemp.sourceTag];

Cell.txt_device.text= [NSStringstringWithFormat:@"%@",tagTrendTemp.device];

Cell.txt_period.text = [NSStringstringWithFormat:@"%@",tagTrendTemp.period];

if((tagTrendTemp.color ==[CPTColorredColor])) {

Cell.txt_color.backgroundColor= [UIColorredColor];

} - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return1;} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

returntrendInProcess.tagTrends.count; }

Page 89

Mỗi khi một trong 2 trend view được chọn (1 chạm hoặc 2 chạm) thì con trỏ đối tượng trendInProcess của lớp TrendSingleView sẽ trỏ tới đối tượng trend được chọn bằng đoạn code: trendInProcess = [trends objectAtIndex:trendID] trong đó trendID bằng với tag của trend view được chọn int trendID = doubleTapedSingleTrendGesture.view.tag

(doubleTapedSingleTrendGesture.view.tag sẽ bằng với tag của đối tượng được chọn). Đoạn code TagTrend *tagTrendTemp = [trendInProcess.tagTrends

objectAtIndex:indexPath.row] sẽ trả về cho ta con trỏ đối tượng chỉ tới trend tag có thứ tự bằng với indexPath.row của trend đang được chọn (mỗi mảng quản lý trend tag trong mỗi trend chỉ chứa tối đa 3 đối tượng). Sau đó các cột của table view sẽ được cập nhật ứng với các thuộc tính của trend tag.

- Cập nhật dữ liệu cho trend. Vì khi hoạt động ở chế độ 2 trend một lúc thì mỗi trend có một chu kỳ lấy mẫu riêng nên cần có 1 timer đơn vị, ở đây timer đơn vị được đặt là 1s. Mỗi khi người dùng bấm Run thì timer sẽ được kích hoạt, khi số lần timer ngắt bằng vói chu kỳ láy mẫu của trend nào thì trend đó sẽ được cập nhật dữ liệu.

Như vậy quá trình cơ bản đã được hoàn thành.

Kết quả đạt được:

Page 90

Hình 5-41 Giao diện Multi Trend

Một phần của tài liệu Xây dựng công cụ cho phép thiết kế ứng dụng SCADA vừa và nhỏ trên nền iOS (Trang 95 - 100)

Tải bản đầy đủ (PDF)

(145 trang)