[TIMOB-20055] iOS: Refactor previewContext to be more memory-efficient
| GitHub Issue | n/a |
|---|---|
| Type | Improvement |
| Priority | Low |
| Status | Closed |
| Resolution | Fixed |
| Resolution Date | 2015-12-21T16:50:40.000+0000 |
| Affected Version/s | Release 5.1.0 |
| Fix Version/s | Release 5.2.0 |
| Components | iOS |
| Labels | n/a |
| Reporter | Hans Knöchel |
| Assignee | Hans Knöchel |
| Created | 2015-11-23T23:32:24.000+0000 |
| Updated | 2016-01-22T22:56:49.000+0000 |
Description
The current
Ti.UI.iOS.PreviewContent implementation works. But to make it even more efficient related to memory management, I refactored a few parts:
- Remove manual properties of TiUIiOSPreviewContext inside the TiPreviewingDelegate and access them through the previewContext property (since the delegate is not public and it keeps the object dependencies clean)
- Release some properties that have not been released before
- Add missing code docs in the TiPreviewingDelegate header file
- Change counter index from int to NSUInteger and remove unused actionGroupIndex property that have been used during testing
- Enable ARC in all related files (!)
Demo code (should work exactly like before):
var actions = [];
var win = Ti.UI.createWindow({
backgroundColor: "white"
});
// The view to be previewed while popping.
var previewView = Ti.UI.createView({
backgroundColor: "blue"
});
// The window to be opened after popping the preview.
var detailWindow = Ti.UI.createWindow({
backgroundColor: "yellow"
});
detailWindow.add(Ti.UI.createLabel({
text: "You made it!"
}));
// The actions to be added to the preview context.
var action = Ti.UI.iOS.createPreviewAction({
title: "Preview Action",
style: Ti.UI.iOS.PREVIEW_ACTION_STYLE_DEFAULT
});
action.addEventListener("click", function(e) {
alert("Title: " + e.title + " / Style: " + e.style+" / Index: " + e.index);
});
var subAction = Ti.UI.iOS.createPreviewAction({
title: "Preview Subaction"
})
subAction.addEventListener("click", function(e) {
alert("Title: " + e.title + " / Style: " + e.style+" / Subindex: " + e.index);
});
var actionGroup = Ti.UI.iOS.createPreviewActionGroup({
title: "More actions...",
style: Ti.UI.iOS.PREVIEW_ACTION_STYLE_DESTRUCTIVE,
actions: [subAction]
});
actions.push(action);
actions.push(actionGroup);
// Create the preview context
var context = Ti.UI.iOS.createPreviewContext({
preview: previewView,
actions: actions, // Can have both Ti.UI.iOS.PreviewAction + Ti.UI.iOS.PreviewActionGroup
contentHeight: 300 // When unspecified, we use the available height
});
// Fired after popping the preview
context.addEventListener("pop", function(e) {
detailWindow.open();
});
// Assign the preview context
var button = Ti.UI.createButton({
previewContext: context, // Will be ignored on unsupported devices
title : "Open Window!",
backgroundColor: "#A6171C",
width: 200,
height: 50,
tintColor: "#fff"
});
win.add(button);
win.open();
PR: https://github.com/appcelerator/titanium_mobile/pull/7487
CR and FT passed! PR Merged!
Improvements to prevent the preview view on peek, if the preview is set to null. Use case: We want the preview only be shown in a tableview, if the cell contains an image to be previewed. This improvements make that possible. Before, a blank preview would have been shown. PR master: https://github.com/appcelerator/titanium_mobile/pull/7594 PR 5_2_X: https://github.com/appcelerator/titanium_mobile/pull/7595